【问题标题】:Dynamic routes in laravel instead of manual routeslaravel 中的动态路由而不是手动路由
【发布时间】:2015-05-05 04:34:04
【问题描述】:

我想防止在 Laravel route.php 中写入所有路由,实际上我像这样 www.example.com/controller/action/p1/p2/p3 遵循 MVC 路由 如果你有什么好主意给我, 我写了这个

$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)){...}

在作曲家中定义我的路线, 就是这样

【问题讨论】:

  • 我不确定,但Resource Controllers 可能会帮助你。
  • 谢谢,但它没有帮助,如果你有任何关于它的例子可能会有所帮助,再次感谢

标签: php laravel model-view-controller routes


【解决方案1】:

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

【讨论】:

  • 谢谢,但我如何检查 laravel 中存在的控制器和方法????例如,在地址栏中,我们有 example.com/test/test2 但 test 作为控制器和 test2 作为操作不存在!是否可以通过 laravel 检查它们??
  • 你不用查,是路由器的责任。只需遵循上述约定
  • 来自ControllerInspector:“当一个控制器使用这种方法路由时,我们使用反射解析出控制器的所有可路由方法,然后为开发人员显式注册每个路由,因此反向路由是可能的。”
  • 哦,我明白了,你也想要动态控制器。我认为你不能用默认路由器做到这一点
  • 或任何示例都有帮助
【解决方案2】:

可以这样做: 首先我们必须编写静态路由,然后是使用数据库的动态路由。

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

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 2017-07-19
    • 2018-04-18
    • 1970-01-01
    • 2016-03-05
    • 2015-01-05
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多