在我的Web文件中,我有一条路由,接受一个$ id作为要传递给我的PagesController中的函数的值。但是,即使$ id没有传递给函数,我仍希望函数仍然执行并显示预期的形式。
web.php文件
T.IntsAsVarchar < 15
PagesController.php文件
Route::get('/request/{id}', 'PagesController@makeRequest');
makeRequest.blade.php
public function makeRequest($id)
{
if(!empty($id)){
$target = Partner::find($id);
}
return view('pages.makeRequest')->with('target', $target);
}
我希望页面显示数据库中包含$ id的详细信息,如果不提供$ id则显示空白。
答案 0 :(得分:2)
Laravel文档指出:像这样使用Optional Parameters:
Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter
控制器
public function makerRequest($id = null)
{
if(!empty($id)){
$target = User::find($id);
return view('pages.makeRequest')->with('target', $target);
} else {
return view('pageslist'); ///set default list..
}
}
答案 1 :(得分:0)
对于带有?的可选参数传递ID,在路由中,并在函数的参数中给$ id = null,如下所示:
Route::get('/request/{id?}', 'PagesController@makeRequest'); //Optional parameter
makeRequest($id = null) {
// Code here...
...
}
答案 2 :(得分:0)
在您的路由文件中(问题中提到的web.php)
Route::get('/request/{id?}', 'PagesController@makeRequest');
以及您的控制器PagesController.php
public function makeRequest($id = null)
{
}
要了解更多信息,请阅读https://laravel.com/docs/5.7/routing#parameters-optional-parameters
答案 3 :(得分:0)
您可以使用optional参数:
Route::get('/request/{id?}', 'PagesController@makeRequest');
现在,由于参数是可选的,因此在定义控制器功能时,需要在参数声明中将其默认值分配给null
。
<?php
public function makeRequest($id = null)
{
if($id){
$target = Partner::findOrFail($id);
return view('pages.makeRequest')->with(compact('target'));
}
// Return different view when id is not present
// Maybe all targets if you want
$targets = Partner::select('column1', 'column2')->get();
return view('pages.all')->with('targets');
}
我使用的是findOrFail
而不是find
。它的Laravel十分方便的功能会自动引发ModelNotFound
异常,而对于前端用户则引发简单的404页面。
因此,如果任何人都在访问www.url.com/request/2
,它是一个有效的ID,那么它将显示一个包含数据的有效页面。如果访问的URL为www.url.com/request/blahblah
,则它将抛出404。它避免了手动处理的工作。
答案 4 :(得分:0)
您所有的解决方案均会有所帮助。最主要的是,当我仅调用视图而不将$ target传递给视图时,页面显示了一个错误。这就是我所做的。
Route::get('/request/{id?}', 'PagesController@makeRequest');
然后在控制器中
public function makeRequest(Request $request, $id=null)
{
if ($id != null) {
$target = Partner::find($id);
return view('pages.makeRequest')->with('target', $target);
}
return view('pages.makeNullRequest');
}
如果您不了解所发生的情况,那么我将创建一个新视图,其中包含该视图,而不是我在问题中发布的视图。
<input type="text" class="form-control" value="" required readonly>
对不起,我没有及时通知你们。我认为Jignesh Joisar最能帮助我解决这个问题。非常感谢你们。你真棒
答案 5 :(得分:0)
对我来说,答案是按照我在路线文件中列出路线的顺序。
routes文件将调用与模式匹配的第一个文件。
Route::get('/ohmy/{id?}', 'OhMyController@show');
Route::get('/ohmy/all', 'OhMyController@all'); //never gets called
相反,将可选参数放在列表的末尾:
Route::get('/ohmy/all', 'OhMyController@all');
Route::get('/ohmy/{id?}', 'OhMyController@show');