laravel 中的动态路线而不是手动路线
Dynamic routes in laravel instead of manual routes
我想防止在 Laravel route.php 中写入所有路由,实际上我遵循这样的 MVC 路由 www.example。com/controller/action/p1/p2/p3
如果你有什么好主意,请给我,
我写了这个
$controller = ucfirst(Request::segment(1));
$controller = $controller . 'Controller';
$result=App::make('indexController')->ChechIfExistController($controller);
if($result){
if(Request::segment(2))
$action=Request::segment(2);
else
$action='index';
if(Request::segment(5))
Route::any('/{controller?}/{action?}/{p1?}/{p2?}/{p3?}',array('uses'=>$controller.'@'.$action));
else if(Request::segment(4))
Route::any('/{controller?}/{action?}/{p1?}/{p2?}',array('uses'=>$controller.'@'.$action));
else if(Request::segment(3))
Route::any('/{controller?}/{action?}/{p1?}',array('uses'=>$controller.'@'.$action));
else
Route::any('/{controller?}/{action?}',array('uses'=>$controller.'@'.$action));
} else{
echo '404';
EXIT;
}
但我不知道如何控制和检查 laravel 中的控制器和动作以了解它是否存在。
我需要你的帮助。
非常感谢。
我找到了,这段代码解决了问题并检查是否存在操作,但我想用 laravel 来做,但似乎 laravel 没有任何东西可以检查控制器和动作
$controller=='Controller'?$controller='IndexController':$controller;
$controllers=new $controller ();
if(method_exists($controllers,$action)){...}
然后在 composer 中定义我的路线,
就这些了
routes.php
Route::controllers([
'auth' => 'Auth\AuthController',
]);
在 AuthController 中你可以这样做:
// will be available as METHODNAME /auth/url/{one?}/{two?}/{three?}/{four?}/{five?}
public [methodName]Url($one, $two, $three, $four, $five)
{
//...
}
// for example POST /auth/register
public function postRegister(Request $request)
{
// ...
}
// GET /auth/login
public function getLogin()
{
//...
}
它没有记录在案,但您可以在来源中看到:
https://github.com/laravel/framework/blob/5.0/src%2FIlluminate%2FRouting%2FControllerInspector.php
https://github.com/laravel/framework/blob/5.0/src%2FIlluminate%2FRouting%2FRouter.php#L238
可以这样做:
首先我们必须编写静态路由,然后是使用数据库的动态路由。
routes.php
Route::get('/', function () {
return 'welcome';
});
Route::get('/faq', function () {
return 'faq';
});
Route::get('/about', function () {
return 'about';
});
Route::get('/{slug}', function ($slug) {
return Article::where('slug', $slug)->first();
});
我想防止在 Laravel route.php 中写入所有路由,实际上我遵循这样的 MVC 路由 www.example。com/controller/action/p1/p2/p3 如果你有什么好主意,请给我, 我写了这个
$controller = ucfirst(Request::segment(1));
$controller = $controller . 'Controller';
$result=App::make('indexController')->ChechIfExistController($controller);
if($result){
if(Request::segment(2))
$action=Request::segment(2);
else
$action='index';
if(Request::segment(5))
Route::any('/{controller?}/{action?}/{p1?}/{p2?}/{p3?}',array('uses'=>$controller.'@'.$action));
else if(Request::segment(4))
Route::any('/{controller?}/{action?}/{p1?}/{p2?}',array('uses'=>$controller.'@'.$action));
else if(Request::segment(3))
Route::any('/{controller?}/{action?}/{p1?}',array('uses'=>$controller.'@'.$action));
else
Route::any('/{controller?}/{action?}',array('uses'=>$controller.'@'.$action));
} else{
echo '404';
EXIT;
}
但我不知道如何控制和检查 laravel 中的控制器和动作以了解它是否存在。 我需要你的帮助。 非常感谢。
我找到了,这段代码解决了问题并检查是否存在操作,但我想用 laravel 来做,但似乎 laravel 没有任何东西可以检查控制器和动作
$controller=='Controller'?$controller='IndexController':$controller;
$controllers=new $controller ();
if(method_exists($controllers,$action)){...}
然后在 composer 中定义我的路线, 就这些了
routes.php
Route::controllers([
'auth' => 'Auth\AuthController',
]);
在 AuthController 中你可以这样做:
// will be available as METHODNAME /auth/url/{one?}/{two?}/{three?}/{four?}/{five?}
public [methodName]Url($one, $two, $three, $four, $five)
{
//...
}
// for example POST /auth/register
public function postRegister(Request $request)
{
// ...
}
// GET /auth/login
public function getLogin()
{
//...
}
它没有记录在案,但您可以在来源中看到: https://github.com/laravel/framework/blob/5.0/src%2FIlluminate%2FRouting%2FControllerInspector.php https://github.com/laravel/framework/blob/5.0/src%2FIlluminate%2FRouting%2FRouter.php#L238
可以这样做: 首先我们必须编写静态路由,然后是使用数据库的动态路由。
routes.php
Route::get('/', function () {
return 'welcome';
});
Route::get('/faq', function () {
return 'faq';
});
Route::get('/about', function () {
return 'about';
});
Route::get('/{slug}', function ($slug) {
return Article::where('slug', $slug)->first();
});