Laravel路由RESTful控制器

时间:2013-01-10 05:48:40

标签: php debugging http-status-code-404 laravel

拥有以下控制器:

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 envirnonment(ubuntu)中。这是我正在使用的http://pastebin.com/f86A3Usx

我的routes.php

4 个答案:

答案 0 :(得分:2)

可能是你正在使用相同的别名(admin_images)并且还要检查你的订单 - 先把更具体的别名放在一边,然后再更加通用,如下:

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

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

答案 1 :(得分:1)

Route::get('admin/images/(:any)', 'admin.images@index');

答案 2 :(得分:1)

您应该通过传递默认值(如null / false / 1)

来使$ id参数成为可选参数
public function get_index($id = null)
{
    if($id){ 
        echo $id;
    }else{
        echo "No ID given!";
    }   
}

并在你的路线中使用(:任何?)。

答案 3 :(得分: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”后,您现在可以处理此函数的两个路由。在您的方法中对“等于空”的简单检查应该可以帮助您完成覆盖每个事件的方法。