[英]Laravel routes for RESTful controllers
具有以下控制器:
class Admin_Images_Controller extends Admin_Controller
{
public $restful = true;
public function __construct()
{
parent::__construct();
}
public function get_index($id)
{
echo $id;
}
我不明白为什么我在不使用ID参数的情况下访问它的原因是什么,因为我收到一条错误消息,表示... missing parameter for ...
但是当我实际上尝试在http://site/admin/images/12
传递参数时http://site/admin/images/12
我收到404
错误。 我想念什么?
我尝试在路线中设置以下内容,也未成功:
Route::any('admin/images', array(
'as' => 'admin_images',
'uses' => 'admin.images@index',
));
//or
Route::any('admin/images/(:any)', array(
'as' => 'admin_images',
'uses' => 'admin.images@index',
));
它表明我的通配符问题有90%发生在我的测试linux环境(ubuntu)中。 这是我当前正在使用的http://pastebin.com/f86A3Usx
可能是因为您使用的是相同的别名(admin_images),并且还检查了订单-将更具体的订单放在首位,并在登录时使用更通用的订单,例如:
Route::any('admin/images/(:any?)', array('uses' => 'admin.images@index'));
删除了别名,只是为了便于阅读。
Route::get('admin/images/(:any)', 'admin.images@index');
您应该通过传递默认值(例如null / false / 1)来使$ id参数为可选参数
public function get_index($id = null)
{
if($id){
echo $id;
}else{
echo "No ID given!";
}
}
并在您的路线中使用(:any?)。
更新路线:
Route::any('admin/images/(:any?)', array(
'as' => 'admin_images',
'uses' => 'admin.images@index',
));
您可以通过组合每个端点的路由来简化路由。 通过添加“?” 到您的第一个参数中,这意味着任何事物都可以存在,但不一定必须存在。 因此, / admin / images和/ admin / images / 1234均已涵盖。
更新的控制器:
class Admin_Images_Controller extends Admin_Controller
{
public $restful = true;
public function __construct()
{
parent::__construct();
}
public function get_index($id=null)
{
echo $id;
}
// ...
}
通过在方法参数中添加“ = null”,您现在可以将两条路由都处理到该函数中。 在您的方法中对“等于空”的简单检查将使您很好地覆盖每个senario。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.