Meg*_*orm 3 php parameters model-view-controller routes laravel-5.4
我对Laravel 5有问题,确切地说,我找不到解决方案。在C#(ASP.NET MVC)中,它很容易解决。例如,我有这些路由(为简单起见,我只键入路由内容和函数标头)
/{category}/Page{page}
/Page{page}
/{category}
Run Code Online (Sandbox Code Playgroud)
该功能在产品控制器中定义。函数头看起来像这样:
public function list($page = 1, $category = null)
Run Code Online (Sandbox Code Playgroud)
问题是,每当我仅输入一个参数时,它都不会按照我在路由中设置的名称发送参数的值,而是按功能参数的顺序推送值。因此,当我打开/ Page1时,它可以正常工作,将值1发送到$ page变量,但是当我访问/ Golf(当场创建)时,它也会将该值发送到$ page变量。有什么可能的主意如何避免这种情况,还是我真的需要提供不同的功能来处理这些情况?
在C#中,它将正确发送该值,并保留未定义参数的默认值。
希望你对我有一个答案。在此先感谢您,祝您愉快:)
因此,如您所见,参数是按顺序而不是按名称传递给函数的。
为了实现所需的功能,您可以在函数中通过如下类型提示请求对象来访问这些路由参数:
class ProductController extends Controller
{
function list(Request $request){ # <----------- don't pass the params, just the request object
$page = $request->route('page'); # <--- Then access by name
$category = $request->route('category');
dd("Page: $page | Category: $category");
}
}
Run Code Online (Sandbox Code Playgroud)
然后当然可以将所有3条路线设置为使用相同的控制器方法:
Route::get('/{category}/Page{page}', 'ProductController@list');
Route::get('/Page{page}', 'ProductController@list');
Route::get('/{category}', 'ProductController@list');
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助..!