Laravel 5.2 像 cakephp 这样的路由
Laravel 5.2 routing like cakephp
我是 laravel 的新手。我来自 cakephp,所以路由对我来说有点困难。
我试过 Question 但出现错误。
我也尝试了 Route::controller();
和 Route::resource();
但没有得到我想要的结果。
我只是希望 rounting 是
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
}
获取参数的最简单方法我认为这种方法可能对您有帮助:
我假设你想要获取参数
//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 controller
Laravel 没有像 CakePHP 那样的隐式路由(像你一样,我从 CakePHP 转移到 Laravel)。你最好定义资源路由,即
$router->resources([
'users' => 'UserController',
'articles' => 'ArticleController',
'events' => 'EventController',
// And so on...
]);
这有利于人们通过查看您的 app/Http/routes.php 文件来了解您的应用程序响应的路由,而不是必须深入研究您的控制器 类 并查看您在其中定义的操作。
我也是来自 cakephp,我写这条路由是为了模拟 cakephp 路由。
Route::any('{anyRoute}', function($anyRoute){
$call = "";
$parts = explode("/", $anyRoute);
$size = sizeof($parts);
if($size > 0){
$controller = ucfirst(strtolower(trim($parts[0])));
$action = trim(array_get($parts, 1));
$params = [];
if(empty($controller)){
return view("welcome");
}
else{
if(empty($action)){
$action = "index";
}
}
if($size > 2){
unset($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', '(.*)');
我是 laravel 的新手。我来自 cakephp,所以路由对我来说有点困难。
我试过 Question 但出现错误。
我也尝试了 Route::controller();
和 Route::resource();
但没有得到我想要的结果。
我只是希望 rounting 是
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
}
获取参数的最简单方法我认为这种方法可能对您有帮助:
我假设你想要获取参数
//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 controller
Laravel 没有像 CakePHP 那样的隐式路由(像你一样,我从 CakePHP 转移到 Laravel)。你最好定义资源路由,即
$router->resources([
'users' => 'UserController',
'articles' => 'ArticleController',
'events' => 'EventController',
// And so on...
]);
这有利于人们通过查看您的 app/Http/routes.php 文件来了解您的应用程序响应的路由,而不是必须深入研究您的控制器 类 并查看您在其中定义的操作。
我也是来自 cakephp,我写这条路由是为了模拟 cakephp 路由。
Route::any('{anyRoute}', function($anyRoute){ $call = ""; $parts = explode("/", $anyRoute); $size = sizeof($parts); if($size > 0){ $controller = ucfirst(strtolower(trim($parts[0]))); $action = trim(array_get($parts, 1)); $params = []; if(empty($controller)){ return view("welcome"); } else{ if(empty($action)){ $action = "index"; } } if($size > 2){ unset($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', '(.*)');