我是拉拉维尔的新手。我来自cakephp,所以路由给我带来了一些困难。
我已经尝试了这个问题,但遇到了错误。我也尝试了Route::controller();
和Route::resource();
但没有得到我想要的结果。
我只是希望叽叽喳喳
http://example.com/controller/action/param1/param2/param3
另外,如果我能得到后端管理的答案,例如
http://example.com/backend/controller/action/param1/param2/param3
在 Laravel 5.2 中,由于烦人的竞争条件,Route::controller('Controller')
的使用已被弃用。
以获得您想要的结果。假设您有一个控制器App'Http'Controllers'MyController
。
在routes.php
文件中,您将具有以下内容:
Route::group(['middleware' => ['web']], function(Router $router) {
// Note the question marks after the parameters
// this makes them optional.
$router->get('uri/{action?}/{param1?}/{param2?}', [
'uses' => 'MyController@getIndex'
]);
});
您现在将有一个控制器方法getIndex
// As the parameters were optional, make sure to give them
// default values.
public function getIndex($action = null, $param1 = null, $param2 = null)
{
// Your route logic
}
我也来自 cakephp,我写这条路由是为了模拟 Cakephp 路由。
Route::any('{anyRoute}', function($anyRoute){ $call = "; $parts = 爆炸("/", $anyRoute); $size = sizeof($parts); if($size> 0){ $controller = ucfirst(strtolower(trim($parts[0]))); $action = trim(array_get($parts, 1)); $params = []; if(empty($controller)){ 返回视图("欢迎"); } 否则{ if(empty($action)){ $action = "索引"; } } if($size> 2){ 未设置($parts[0], $parts[1]); $params = array_merge($params, $parts); } $object = app('App''''Http''''Controllers'''''.$controller.'Controller'); call_user_func_array([$object, $action], $params); } })->where('anyRoute', '(.*)');
获取参数的最简单方法 我认为这种方式可能会帮助您:
我假设你想得到参数
//App/routes.php
Route::get( '/controller/action/{param1}/{param2}/{param3}' , 'ActionController@getParams' );
//App/Http/Controllers/ActionController.php
public function getParams($param1, $param2, $param3 )
{
return $param1.$param2.$param3;
}
对于第二部分,它是相同的。
获取更多信息:拉拉维尔控制器
Laravel没有像CakePHP那样的隐式路由(和你一样,我从CakePHP转移到了Laravel)。您最好定义资源路由,即
$router->resources([
'users' => 'UserController',
'articles' => 'ArticleController',
'events' => 'EventController',
// And so on...
]);
这样做的好处是,人们能够通过查看 app/Http/routes.php 文件来查看应用程序响应的路由,而不必深入研究控制器类并查看在其中定义的操作。