PHP-Laravel中带参数的路由
我正在尝试使用Laravel创建一个RESTful API 在myPHP-Laravel中带参数的路由,php,laravel,Php,Laravel,我正在尝试使用Laravel创建一个RESTful API 在myroutes.php中: Route::get('/accounts/(:any?)', array('as'=>'account_index', 'uses'=>'accounts@index')); 我的控制器: class Accounts_Controller extends Base_Controller { public $restful = true; public function get_inde
routes.php
中:
Route::get('/accounts/(:any?)', array('as'=>'account_index', 'uses'=>'accounts@index'));
我的控制器:
class Accounts_Controller extends Base_Controller {
public $restful = true;
public function get_index($id = null) {
if(!$id)
return Response::json(Account::all());
return Response::json(Account::find($id));
}
当我尝试任何请求时,accounts/##
都会得到404个响应,但是accounts
工作正常。当我将路线更改为非帐户时,如:
Route::get('/accts/(:any?)'
我的路由按预期工作,除此之外,发送到帐户的请求仍然工作正常。是不是因为我使用了get_index
作为函数名,所以它恢复使用标准http://localhost/controller/method/arguments
编辑我自动检测到控制器:
Route::controller(Controller::detect());
定义管线时,这些管线的定义顺序很重要。Laravel使用正则表达式将请求的URI与这些模式进行匹配,第一个匹配的URI将在不进行进一步处理的情况下使用
Route::controller('accounts')
有效地匹配了accounts/(:any?/(:any?/)/(:any?)/(:any?)
等。如果您要测试urlaccounts/index/12
您将得到预期的结果
Route::get('/accounts/(:any?)', array('as'=>'account_index', 'uses'=>'accounts@index'));
Route::controller( Controller::detect() );
希望这能有所帮助。当您定义路由时,这些路由的定义顺序很重要。Laravel使用正则表达式将请求的URI与这些模式进行匹配,第一个匹配的URI将在不进行进一步处理的情况下使用
Route::controller('accounts')
有效地匹配了accounts/(:any?/(:any?/)/(:any?)/(:any?)
等。如果您要测试urlaccounts/index/12
您将得到预期的结果
Route::get('/accounts/(:any?)', array('as'=>'account_index', 'uses'=>'accounts@index'));
Route::controller( Controller::detect() );
希望这有帮助。这应该成为问题下的一条评论。如果你觉得最后一句回答了原来的问题,我建议你详细解释一下,把最初的问题改成评论。乔治,很抱歉,这是一个评论,我没有注意。从actaeon获得更多信息后,这是一个真正的答案。啊,因此注册控制器实际上强制执行http://localhost/controller/method/arguments
方案。如果我只想手工布线,我就不应该把Controller:detect()
放进去。我把电话线拔了出来。谢谢你的帮助!这应该成为问题下的评论。如果你觉得最后一句回答了原来的问题,我建议你详细解释一下,把最初的问题改成评论。乔治,很抱歉,这是一个评论,我没有注意。从actaeon获得更多信息后,这是一个真正的答案。啊,因此注册控制器实际上强制执行http://localhost/controller/method/arguments
方案。如果我只想手工布线,我就不应该把Controller:detect()
放进去。我把电话线拔了出来。谢谢你的帮助!你们的其他路线是什么?您正在使用Route::controller吗?如果是这样,它需要在其他路由之后定义。我唯一定义的其他路由是Laravel附带的默认主页,并且控制器正在注册到route::controller(controller::detect())代码>您的其他路线是什么?您正在使用Route::controller吗?如果是这样,它需要在其他路由之后定义。我唯一定义的其他路由是Laravel附带的默认主页,并且控制器正在注册到route::controller(controller::detect())代码>