【问题标题】:laravel routing like code igniterlaravel 路由类似 codeigniter
【发布时间】:2018-03-24 18:54:23
【问题描述】:

我试图从使用代码点火器切换到 laravel,但是我注意到在我遵循的每个教程中,我们总是在 laravel 的 route.php 中声明路由,这与代码点火器中的默认路由不同,如 http://localhost/projname/controller/method。有没有办法像 CI 一样进行自动路由,或者我只是错过了 laravel 路由规则中的某些内容?这非常重要,因为我们都知道大型网站有超过 50 个链接,如果我们要声明,那将是一件很麻烦的事情这些都在 laravel 的 routes.php 中。

【问题讨论】:

    标签: php codeigniter laravel


    【解决方案1】:

    有没有办法实现像 CI 这样的自动路由

    为什么会有。在你的路由文件中做Route::controller(Controller::detect());

    现在在您的控制器类中确保每个函数名称都与action_ 连接。所以如果你的函数名是homepage(),那么就改成action_homepage()

    请记住,您可以使用 RESTful 控制器名称 get_homepage()post_homepage()。但是你必须在你的控制器中声明这个类变量public static $restful = true;

    【讨论】:

    • Route::controller(Controller::detect());由于不同文件系统的行为不一致,该函数已在 Laravel 4 中删除。注册控制器的正确方法应该是明确定义您希望在路由文件中使用的每个控制器。
    • Laravel 5 再次拥有Route::controller() 选项。 laravel.com/docs/5.0/controllers#implicit-controllers
    【解决方案2】:
        //create controller name like UserController
    
    //Steps:
    // 1. route matched to either post or get request, 
    // 2. used web/controllerName/MethodName/Parameter1/parameter2 .. 
    // all parameters received in an array as $params. web/ is used like a route 
    // prefix. If no method is passed it will call index method
    // 3. explode the parameter
    // 4. called the controller with method and paramteres passed
    // 5. parameters are matched for regex allowing alphanumeric and slash (url)
    // 6. passed through guest middleware
    
    // created controller as mentioned below:
    
    // class SomeController extends Controller
    // {
    //     public function index($param1,$param2,$param3){
    
    //       return 'index'.$param1.$param2.$param3;
    //     }
    
    
    // }
    
    
    
    Route::match(['get','post'],'/web/{controller}/{method?}/{params?}', function ($controller, $method='index', $params='') {    
    
        $params = explode('/', $params);
    
        $controller = app()->make("\App\Http\Controllers\\". ucwords($controller).'Controller' );
    
    
        return $controller->callAction($method, $params);
    
    })->where('params', '[A-Za-z0-9/]+')->middleware('guest');
    

    【讨论】:

    • 您能否分享更多上下文,以便 OP 了解您为什么在代码中执行此操作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2019-11-08
    • 2011-09-11
    • 1970-01-01
    • 2010-11-20
    • 2011-07-08
    相关资源
    最近更新 更多