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