Laravel检测视图中的路由组

3
在我的管理页面中,我希望使用AngularJS来管理我的电子商务产品。
例如:admin/product将会查询admin/api/product中的API。
我还没有设置用户身份验证,因此我还不知道用户是否是管理员用户。
我只希望在管理员页面上包含angularjs管理脚本。
有没有办法仅在路由组为admin的情况下在我的视图中包含angular adminapp.js。例如:对于面向公众的页面,我不会向公众暴露adminapp.js。
我知道如果用户被验证为管理员,则可以执行此操作,但我希望能够在路由组为admin的情况下执行此操作。
Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function() {
    Route::group(['prefix' => 'api', 'namespace' => 'Api'], function() {
        Route::resource('product', 'ProductController');
    });

    Route::group(['namespace' => 'Product'], function() {
        Route::get('product', 'ProductController');
    });
});

templates.master.blade.php文件中,类似以下内容:

@if($routeGroupIsAdmin)
    {{ HTML::script('js/adminapp.js') }}
@endif

甚至更多:
{{ Route::getCurrentRoute()->getPrefix() == 'admin'? HTML::script('js/adminapp.js') : HTML::script('js/app.js') }}

然而,以上示例存在一个问题,即如果我在一个深度嵌套的视图中:admin/categories/products,则我的前缀将不再是 admin。我不想使用正则表达式来检测路由前缀中的单词 admin
2个回答

5

据我所知,目前没有内置的方法,但有一个可行方案:

首先,添加一个路由过滤器

Route::filter('set-route-group', function($route, $request, $value){
    View::share('routeGroup', $value);
});

然后将此添加到您的管理员组中(您以后也可以将其用于其他组):

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'before' => 'set-route-group:admin'], function(){

同时在routes文件的顶部添加以下内容,以确保$routeGroup变量始终被设置:

View::share('routeGroup', null);

那么在您的视角中:
@if($routeGroup == 'admin')
    {{ HTML::script('js/adminapp.js') }}
@endif

完美 - 我已经用一点变化完成了这个:Routes.php 应用了 'before' => 'admin' 过滤器 Filters.php Route::filter('admin', function() { View::share('isGroupAdmin', true); }); templates.master.php {{ isset($isGroupAdmin) ? HTML::script('js/adminapp.js') : HTML::script('js/app.js') }} 这样,当我构建认证组件时,只需将认证逻辑添加到此管理员过滤器中 - Gravy
当然,那也可以。我提出的解决方案的优点是更通用,可以与多个路由组一起使用(我考虑到未来可能需要这样做的访问者)。还有一件事,请考虑更改您过滤器的名称。通常,仅命名为“admin”的before过滤器表明该过滤器会检查用户是否具有管理员权限。 - lukasgeiter

2
你可以使用路由片段。
如果你的组前缀是 'admin',URL 看起来像这样 http://example.com/admin/home, 你可以在 blade 中使用 Request::segment(1) 来检查它。它会渲染 URL 的第一个片段。
@if(Request::segment(1) == 'admin')
   {{HTML::script('js/adminapp.js')}}
@endif

如果您想检查其他部分,请更改索引。

非常感谢。谢谢Sahan。高度赞赏。谢谢Sahan。 - Kamlesh
可以这样做:request()->segment(1) == 'admin' - Vahid Amiri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接