为什么 old() 方法在 Laravel Blade 中不起作用?
Why does the old() method not work in 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');
更改加载视图的方式并将数组作为参数传递。
// 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 />
您只需将变量传回视图即可:
在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()
检查:
在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()
。
我的环境是 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');
更改加载视图的方式并将数组作为参数传递。
// 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 />
您只需将变量传回视图即可:
在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()
检查:
在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()
。