【问题标题】:Laravel routes not working with subfolderLaravel 路由不适用于子文件夹
【发布时间】:2018-12-13 15:30:17
【问题描述】:

现在使用从 4.2 迁移的 Laravel 5,laravel 5 安装在子文件夹“abc”中,我必须为每条路线编写 abc/warehouse 吗?以前是 /warehouse。我想在子目录 abc 中使用所有现有路由,例如 /warehouse。

我在 localhost xampp 上,端口为 81。http://localhost:81/warehouse

这里有快速解决方案的人

【问题讨论】:

    标签: laravel laravel-5 routes laravel-5.1


    【解决方案1】:

    定义路由时使用prefix

    Route::prefix('abc')->group(...)
    

    Route Prefixes

    Route::prefix('abc')->group(function () {
        Route::get('warehouse', function () { 
            // Matches The "/abc/warehouse" URL
         }); 
    });
    

    理想情况下,您应该在RouteServiceProvider 中进行操作

    Route::middleware('web')
       ->prefix('abc')
       ->namespace($this->namespace)
       ->group(base_path('routes/web.php'));
    

    这样,路由文件中的所有内容都带有前缀,您不需要额外的组包装。

    这是 5.0 文档中的示例:

    Route::group(['prefix' => 'admin'], function() {
        Route::get('users', function() { 
            // Matches The "/admin/users" URL
         });
     });
    

    【讨论】:

    • 感谢您的回答,但是当我将应用程序转移到实时服务器时,我必须再次更改路由怎么办?我有超过 500 条路线。还有其他解决方案吗?
    • 你可以用一个组来包装你的所有路由,这样它就只有一个调用。
    • 谢谢,我会试一试。感谢您的帮助
    • Opps... 它给了我方法前缀不存在。
    • 改用Route::group(['prefix => 'abc'], function() { ...})
    【解决方案2】:

    你可以做的是在RouteServiceProvider中添加一行mapWebRoutes这样的函数

    public function mapWebRoutes()
    {
        //default 
        Route::middleware('web')
                 ->namespace($this->namespace)
                 ->group(base_path('routes/web.php'));
    
        //subfolder
        Route::middleware('web')
                 ->prefix('abc')
                 ->namespace($this->namespace)
                 ->group(base_path('routes/abc.php'));
    }
    

    然后在routes/abc.php 中创建一个文件并将所有路线复制粘贴到其中

    路由前缀https://laravel.com/docs/5.6/routing#route-group-prefixes

    对于 laravel 5.0,您必须将 Route::group 包裹起来

    Route::group(['prefix' => 'abc', 'namespace' => 'Auth'], function(){
         //define all your routes here     
         Route::post('login', 'AuthController@login');
    
    });
    

    命名空间:我在命名空间中定义了Auth,这意味着我的所有控制器(如AuthController)文件都应该在app/Http/Controllers/Auth 文件夹中。

    Laravel 路由 5.0 https://laravel.com/docs/5.0/routing#route-group-prefixes

    对于 laravel 5.0 命名空间结构检查这个https://laravel.com/docs/5.0/structure

    【讨论】:

    • 我认为最简单的方法是使用 .htaccess。我们可以用 .htaccess 做到这一点吗?
    • 我使用的是 laravel 5.0
    • 这个最简单了,什么都不用做
    • 如果您使用的是 5.0,那么您必须将 Route:group 包裹在里面
    • 命名空间是什么?我是 Laravel 的新手,刚刚从 4.2 版本迁移,所以真的不确定这里的命名空间。我怎样才能获得当前的命名空间?
    猜你喜欢
    • 1970-01-01
    • 2015-05-14
    • 2021-11-19
    • 2017-06-20
    • 2015-10-19
    • 1970-01-01
    • 2015-08-15
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多