繁体   English   中英

RESTful控制器的Laravel路由

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM