Laravel检测视图中的路径组

时间:2014-12-26 12:37:19

标签: php angularjs laravel

在我的管理页面中,我想使用AngularJS管理我的电子商务产品。

e.g。 admin / product将在admin / api / product

中查询api

我还没有设置用户身份验证,所以我还不知道用户是否是管理员用户。

我只希望在管理页面上包含angularjs管理脚本。

只有当路由组是admin时,才能在我的视图中包含角度adminapp.js。例如对于面向公众的页面,我不会将adminapp.js暴露给面向公众的页面。

我知道如果用户被认证为管理员,我可以这样做 - 但如果路由组是管理员,我希望能够这样做。

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用路段。

如果您的网上论坛前缀为“ admin”,并且网址看起来像这样http://example.com/admin/home, 您可以使用Request::segment(1)在刀片上对其进行检查。它将呈现URL的第一段。

@if(Request::segment(1) == 'admin')
   {{HTML::script('js/adminapp.js')}}
@endif

如果要检查另一个段,只需更改索引即可。