簡體   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