Laravel路由困境

时间:2015-05-31 11:14:16

标签: laravel laravel-routing

我的路由非常有效:

Route::get('/', 'MainController@index');
Route::get('about', 'MainController@about');
Route::get('contact', 'MainController@contact');
Route::get('signUp', 'MainController@signUp');

MainController.php中的正确函数按预期调用。

我遇到问题的方法是让以下工作:

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

我试过了:

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

我不想列出像:

这样的所有功能
Route::get('api/addUser', 'APIController@addUser');
Route::get('api/getUser', 'APIController@getUser');
Route::get('api/getAllUsers', 'APIController@getAllUsers');
...

我更喜欢/api/*请求只是被定向到APIController ...

如果有人有任何提示,那真的很棒......

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

2 个答案:

答案 0 :(得分: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, []);
});

但是我建议你在@shaddy的回答中提到Implicit Controllers,因为addUser之类的操作需要将HTTP动词限制为POST,你可以这样做。用这种方法做得恰到好处。

此外,由于您的路线路径看起来像是在构建API,因此您可能需要考虑使用RESTful Resource Controllers

答案 1 :(得分:0)

你有Route::controller方法将你的类绑定为implict controller:

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

这将声明新的Implict Controller,它会自动将所有调用映射到前缀为请求类型的控制器方法。

因此,如果您对/api/users执行GET请求,则会触发APIController的getUsers方法。如果您对/api/users发出POST请求,则会触发postUsers方法等

您可以在documentation

中详细了解Implict控制器