Laravel - 在导航栏中激活

时间:2016-05-26 02:55:40

标签: php laravel

我有以下代码,效果非常好。

我的setActive()功能:

function setActive($path, $nav = 'class=active')
{
    return Request::fullUrl() === $path ? $nav : '';
}

我怎么称呼它:

<li {{ setActive(route('home')) }}>
    <a href="{{ route('mod.banned.index') }}">
        Home
    </a>
</li>

因此,每当页面成为主页时,它都会将其设置为活动状态。

但是,如果我想让它工作,它对子页面不起作用。例如,如果我有/articles/article-1/articles/article-2,并且无论什么文章,我都希望文章标签被标记为有效。

我想做类似的事情:

setActive(route('articles.index') . '/*') 
// 'articles.index' route = /articles/
// Should be active if -> /anything/after/the/slash/

我希望这是有道理的。

我怎样才能做到最好?

感谢。

3 个答案:

答案 0 :(得分:0)

这对我有用:

function setActive($path, $nav = 'class=active')
{
    return preg_match("/".preg_quote($path, '/')."\S*/", Request::fullUrl()) ? $nav : '';
}

答案 1 :(得分:0)

您可以使用https://github.com/letrunghieu/active Laravel 4/5应用程序的辅助类是在当前路由上获得活动类。

答案 2 :(得分:0)

我会做一些事情,比如向Views添加一个全局变量并在任何地方使用它

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        view()->composer('*', function ($view) {
            $view->with('active_route', \Route::currentRouteName());
        });
    }
}
刀片视图中的

。它简单得多。可能会帮助某人;)

<ul>
     <li class="{{ $active_route == "home" && "active" }}"> Home </li>
</ul>