我的路由非常有效:
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,所以请放轻松我!
答案 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控制器