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();
});