1

具有以下控制器:

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我得到一个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)中。这是我目前正在使用的 routes.php http://pastebin.com/f86A3Usx

4

4 回答 4

2

可能是您使用了相同的别名(admin_images),并且检查您的订单 - 将更具体的放在第一位,然后越通用,如下所示:

Route::any('admin/images/(:any?)', array('uses' => 'admin.images@index'));

已删除别名,只是为了便于阅读。

于 2013-01-10T05:58:55.093 回答
1
Route::get('admin/images/(:any)', 'admin.images@index');
于 2013-01-10T06:55:57.163 回答
1

您应该通过传递默认值(如 null/false/1)使 $id 参数成为可选参数

public function get_index($id = null)
{
    if($id){ 
        echo $id;
    }else{
        echo "No ID given!";
    }   
}

并在您的路线中使用 (:any?) 。

于 2013-01-11T09:34:23.650 回答
1

更新路线:

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”,您现在可以将两个路由都处理到此函数中。在您的方法中对“等于 null”进行简单的检查应该会让您很好地涵盖每个场景。

于 2013-01-11T16:46:57.197 回答