Почему метод old() не работает в Laravel Blade?

Моя среда — Laravel 6.0 с PHP 7.3. Я хочу показать старое значение поиска в текстовом поле. Однако метод old() не работает. После поиска старое значение поиска исчезло. Почему не отображается старое значение? Я выяснил, что в большинстве случаев можно использовать redirect()->withInput(), но я не хочу использовать redirect(). Я бы предпочел использовать view(). метод

Контроллер

class ClientController extends Controller
{
    public function index()
    {
        $clients = Client::orderBy('id', 'asc')->paginate(Client::PAGINATE_NUMBER);

        return view('auth.client.index', compact('clients'));
    }

    public function search()
    {
        $clientID = $request->input('clientID');
        $status = $request->input('status');
        $nameKana = $request->input('nameKana');
        $registerStartDate = $request->input('registerStartDate');
        $registerEndDate = $request->input('registerEndDate');

        $query = Client::query();
        if (isset($clientID)) {
            $query->where('id', $clientID);
        }
        if ($status != "default") {
            $query->where('status', (int) $status);
        }
        if (isset($nameKana)) {
            $query->where('nameKana', 'LIKE', '%'.$nameKana.'%');
        }
        if (isset($registerStartDate)) {
            $query->whereDate('registerDate', '>=', $registerStartDate);
        }
        if (isset($registerEndDate)) {
            $query->whereDate('registerDate', '<=', $registerEndDate);
        }
        $clients = $query->paginate(Client::PAGINATE_NUMBER);

        return view('auth.client.index', compact('clients'));
    }
}

Маршруты

Route::get('/', 'ClientController@index')->name('client.index');
Route::get('/search', 'ClientController@search')->name('client.search');

person Naoki Oshiumi    schedule 12.12.2019    source источник
comment
Что вы имеете в виду под старым методом?   -  person Nico Haase    schedule 12.12.2019
comment
@NicoHaase В Laravel есть метод old(), который показывает старый ввод при использовании ->withInput() в вызове redirect().   -  person Tim Lewis    schedule 12.12.2019
comment
так что в представлении auth.client.index вы хотите снова предварительно заполнить формы отправленными данными?   -  person Alberto Sinigaglia    schedule 12.12.2019


Ответы (2)


Вам просто нужно передать переменные обратно в представление:

In Controller:

public function search(Request $request){
  $clientID = $request->input('clientID');
  $status = $request->input('status');
  $nameKana = $request->input('nameKana');
  $registerStartDate = $request->input('registerStartDate');
  $registerEndDate = $request->input('registerEndDate');

  ...

  return view('auth.client.index', compact('clients', 'clientID', 'status', 'nameKana', 'registerStartDate', 'registerEndDate'));
}

Затем в вашем индексе просто выполните isset() проверку переменных:

In index.blade.php:

<input name="clientID" value="{{ isset($clientID) ? $clientID : '' }}"/>
<input name="status" value="{{ isset($status) ? $status : '' }}"/>
<input name="nameKana" value="{{ isset($nameKana) ? $nameKana : '' }}"/>
...

Поскольку вы возвращаете одно и то же представление в обеих функциях, но передаете переменные только одной из них, вам нужно использовать isset(), чтобы убедиться, что переменные существуют, прежде чем пытаться использовать их в качестве атрибута value() для ваших входных данных.

Кроме того, убедитесь, что в вашем методе есть Request $request, public function search(Request $request){ ... } (см. выше), чтобы $request->input() был доступен.

person Tim Lewis    schedule 12.12.2019

Измените способ загрузки представления и передайте массив в качестве аргумента.

// Example:
// Create a newarray with new and old data
$dataSet = array (
    'clients'           => $query->paginate(Client::PAGINATE_NUMBER),
    // OLD DATA
    'clientID'          => $clientID,
    'status'            => $status,
    'nameKana'          => $nameKana,
    'registerStartDate' => $registerStartDate,
    'registerEndDate'   => $registerEndDate
);

// sent dataset
return view('auth.client.index', $dataSet);

Затем вы можете получить к ним доступ в своем представлении как к переменным $registerStartDate, но лучше сначала проверить, существует ли он, используя метод isset().

пример <input type='text' value='@if(isset($registerStartDate)) {{registerStartDate}} @endif />

person CAllen    schedule 12.12.2019