2015-05-31 136 views
3

我有这个路由这是伟大的工作:Laravel路由愁楚

Route::get('/', '[email protected]'); 
Route::get('about', '[email protected]'); 
Route::get('contact', '[email protected]'); 
Route::get('signUp', '[email protected]'); 

MainController.php正确的功能得到预期调用。

当我遇到麻烦的是在得到以下工作:

我有一个新的文件名为APIController.php。所有请求http://eamorr.com/api/getUsers应该由getUsers()处理APIController.php

我尝试这样做:

Route::get('api', '[email protected]'); //this works fine... 
Route::any('api/{$function}', function($function){ //but this won't work! 
    return redirect()->route('api/'.$function); 
}); 

我不想列出每一样功能:

Route::get('api/addUser', '[email protected]'); 
Route::get('api/getUser', '[email protected]'); 
Route::get('api/getAllUsers', '[email protected]'); 
... 

我宁愿如果/api/*请求一下就指向APIController ...

如果有人有任何提示,这将是非常棒的...

我只昨天开始学习Laravel,所以请放轻松点!

+0

我相信你需要从路由模式中省略'$'。 http://laravel.com/docs/5.0/routing#route-parameters –

+0

@GerardvanHelden是的,你是正确的 - 一个容易犯的错误,为一个新人。但它仍然不起作用。我认为'return redirect() - > route('api /'。$ function);'不正确。而我无法弄清楚我应该返回什么...... – Eamorr

+0

请问为什么你不想列出每个功能?在我看来,将所有可能的路由明确地集中在一个地方是laravel路由的优点之一.. –

回答

1

你可以这样调用控制器动作:

Route::any('/api/{action}', function($action) 
{ 
    // this will call the method from the controller class and return it's response 
    return app()->make('App\Http\Controllers\ApiController')->callAction($action, []); 
}); 

不过我建议你看看Implicit Controllers如@shaddy在他的回答表明,因为如addUser行动将需要限制HTTP动词POST,这你不能用这种方法正确地做。


而且,因为从你的路线路径它看起来像你建立一个API,你可能要考虑使用RESTful Resource Controllers

+0

谢谢。非常好的答案。有用于了解HTTP动词。 – Eamorr

+0

不客气。我还更新了我的答案,并提供了可能适用于您的方案的其他建议。 – Bogdan

+0

谢谢。是的,我快速浏览了RESTful资源控制器。我只打算使用GET和POST动词,并且希望保持这种甜美和简单。虽然我很乐意纠正(并欢迎它!),为什么这样做并不是一个好主意。 – Eamorr

0

你有Route::controller方法,将您的类绑定的内隐控制器:

Route::controller('api', 'APIContoller'); 

这将宣布新Implict Controller它会自动映射所有呼叫与请求类型为前缀的控制器方法。

所以,如果你做的请求/api/users,这将触发方法APIController。如果你这样做POST请求/api/users就会触发postUsers法等

你可以阅读更多有关documentation隐控制器。

+0

感谢您与文档的链接。不幸的是,当我把Route :: controller('api','APIController');'放到routes.php中时,出现一个错误页面'抱歉,找不到你正在寻找的页面。 (RouteFollection.php第145行中的NotFoundHttpException)'... – Eamorr

+0

@Eamorr你试图访问什么网址?在名为'public function getUsers'的APIController中创建一个简单的方法,然后尝试打开'/ api/users'。 – shaddy

+0

我有一个公共函数'getUsers()'在类'APIController extends Controller'中。 'getUsers()'返回:'return“getUsers”;'我想我在这里做一些愚蠢的事情? – Eamorr