PHP-Laravel中带参数的路由

PHP-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

我正在尝试使用Laravel创建一个RESTful API

在my
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?)
等。如果您要测试url
accounts/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?)
等。如果您要测试url
accounts/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())