Как получить текущий URL внутри оператора @if (Blade) в Laravel 4?


269

Я использую Laravel 4. Я хотел бы получить доступ к текущему URL-адресу внутри @ifусловия в представлении, используя шаблонизатор Laravel's Blade, но я не знаю, как это сделать.

Я знаю, что это можно сделать с помощью чего-то подобного, <?php echo URL::current(); ?>но это невозможно в выражении @ifлезвия.

Какие-либо предложения?


любой ответ ниже помог с вашей проблемой?
N69S

Ответы:


358

Вы можете использовать: Request::url()для получения текущего URL, вот пример:

@if(Request::url() === 'your url here')
    // code
@endif

Laravel предлагает метод, чтобы узнать, соответствует ли URL шаблону или нет

if (Request::is('admin/*'))
{
    // code
}

Проверьте соответствующую документацию, чтобы получить различную информацию запроса: http://laravel.com/docs/requests#request-information


2
<li {{(Request :: is ('admin / dashboard')? 'class = "active"': '')}}> я попробовал это, не удалось: x
TransformBinary

4
В моем случае я использовал начальный / для URL, удаление его решило бы проблему
Хоакин Л. Роблес

@Andreyco, что если мне нужно разместить баннер на всех страницах, кроме домашней страницы, попробуйте это не работает@if(Request::url()!=='/') <div class="bannerImage">{{ HTML::image('images/fullimage3.jpg') }}</div> @endif
Юсеф Альтаф

4
Я использую для этого следующий формат: <li {!! (Запрос :: url () == url ('/'))? 'class = "active"': '' !!}>, потому что формат с {{some_code}} использует строковое кодирование.
Виктор

3
url() теперь возвращает экземпляр компоновщика . должен использоватьurl()->current()
Джефф Puckett

92

Вы также можете использовать, Route::current()->getName()чтобы проверить название вашего маршрута.

Пример: rout.php

Route::get('test', ['as'=>'testing', function() {
    return View::make('test');
}]);

Посмотреть:

@if(Route::current()->getName() == 'testing')
    Hello This is testing
@endif

38
К вашему сведению, так Route::is('testing')же, как Route::current()->getName() == 'testing'.
Хкан

@Hkan Нет, оба отличаются, Route::is('testing')- >> тестирование не будет работать Route::is('test')- >> тестировать это будет работать Route::current()->getName() == 'testing'алиасы и URL разные
Naveen Singh raghuvanshi

1
@Naveen Нет, Route::is()проверяет имя маршрута, а не путь.
Hkan

1
также стенографияRoute::currentRouteName()
Джефф

@Hkan Да, но это не сработает при работе с параметрами в вашем URL, например с токенами ...
Pathros

66

Может быть, вы должны попробовать это:

<li class="{{ Request::is('admin/dashboard') ? 'active' : '' }}">Dashboard</li>

47

Я бы сделал это так:

@if (Request::path() == '/view')
    // code
@endif

где '/ view' - это имя вида в rout.php.


Как определить, находится ли текущий каталог дома? Я имею в виду, публичный /. Ааа, я понял, я просто набрал=='public'
Pathros

1
Если в файле route.php home dir имеет значение «/», вы просто пишете== '/')
Jucaman

Как бы вы заставили его работать с параметрами? Не только название маршрута.
Патрос

Вы можете объединять параметры разными способами после имени маршрута, в зависимости от того, как вы настроили свои маршруты.
Jucaman

Я делаю это так: Request::url()- чем вы получаете полный URL
Дерк Ян Спилман

37

Для того, чтобы получить current urlв bladeокне вы можете использовать следующие,

<a href="{{url()->current()}}">Current Url</a>

Так как вы можете сравнить, используя следующий код,

@if (url()->current() == 'you url')
    //stuff you want to perform
@endif

2
Если вам нужно также получить строку запроса в блейде, вы можете использовать ее, request()->getQueryString()что очень полезно в сочетании с тем, url()->current()что исключает строку запроса.
Спенсер О'Рейли,

25

Это помогло мне для начального класса начальной загрузки в Laravel 5.2 :

<li class="{{ Request::path() == '/' ? 'active' : '' }}"><a href="/">Home</a></li>
<li class="{{ Request::path() == 'about' ? 'active' : '' }}"><a href="/about">About</a></li>

1
Спасибо, я знал код, но Google получил меня за 5 секунд, ха-ха.

Также это то же самое работает с Laravel 4.2, и это работает хорошо. Спасибо
Vipertecpro

Также работаю над Laravel 5.6, спасибо ... это только спасло меня от создания навигаций для каждого вида: D
LaravDev

19

Немного стар, но это работает в L5:

<li class="{{ Request::is('mycategory/', '*') ? 'active' : ''}}">

Это захватывает и / mycategory и / mycategory / slug


1
Я использую{{ Request::is('clientes/*') ? 'active' : ''}}
Алекс Анджелико

16

Laravel 5.4

Глобальные функции

@if (request()->is('/'))
    <p>Is homepage</p>
@endif

Это не всегда работает, если вы имеете дело со строкой запроса, например, domain.com/?page_id=1, domain.com/?page_id=2, так как эти URL-адреса также равны "/"
Райан С

Я использовалrequest()->routeIs('...')
Лачезар Тодоров

15

Я лично не пытался бы схватить это в представлении. Я не восхищаюсь в Laravel, но я думаю, что вам нужно отправить свой маршрут в контроллер, а затем в контроллере передать переменную (через массив) в ваше представление, используя что-то вроде $url = Request::url();.

Один из способов сделать это в любом случае.

РЕДАКТИРОВАТЬ: На самом деле посмотрите на метод выше, возможно, лучший способ.


11

Простой navbar с начальной загрузкой может быть выполнен как:

    <li class="{{ Request::is('user/profile')? 'active': '' }}">
        <a href="{{ url('user/profile') }}">Profile </a>
    </li>

9

Самый простой способ - использовать: Request::url();

Но вот сложный путь:

URL::to('/').'/'.Route::getCurrentRoute()->getPath();

9

Есть два способа сделать это:

<li{!!(Request::is('your_url')) ? ' class="active"' : '' !!}>

или

<li @if(Request::is('your_url'))class="active"@endif>

8

Вы должны попробовать это:

<b class="{{ Request::is('admin/login') ? 'active' : '' }}">Login Account Details</b>

7

Установите этот код, чтобы он применялся автоматически для каждого <li>+ вам нужно использовать HTMLBuilderбиблиотеку в вашем проекте Laravel

<script type="text/javascript">
    $(document).ready(function(){
        $('.list-group a[href="https://stackoverflow.com/{{Request::path()}}"]').addClass('active');
    });
</script>

7

Вы можете использовать этот код для получения текущего URL:

echo url()->current();

echo url()->full();

Я получаю это из документов Laravel.


5

Другой способ написать if и else в Laravel, используя путь

 <p class="@if(Request::is('path/anotherPath/*')) className @else anotherClassName @endif" >
 </p>

Надеюсь, поможет


4

вместо того, чтобы использовать URL :: path () для проверки вашего текущего местоположения пути, вы можете рассмотреть Route :: currentRouteName (), так что на всякий случай, если вы обновляете свой путь, вам не нужно просматривать все свои страницы для обновления имя пути снова.




2
@if(request()->path()=='/path/another_path/*')
@endif

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.
Rollstuhlfahrer

2

Попробуй это:

@if(collect(explode('/',\Illuminate\Http\Request::capture()->url()))->last() === 'yourURL')
    <li class="pull-right"><a class="intermitente"><i class="glyphicon glyphicon-alert"></i></a></li>
@endif

Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную, немедленную помощь. Надлежащее объяснение было бы значительно улучшить свою долгосрочную ценность , показывая , почему это хорошее решение проблемы, и сделает его более полезным для читателей будущих с другими подобными вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.
18:30



1

Самый простой способ

<li class="{{ Request::is('contacts/*') ? 'active' : '' }}">Dashboard</li>

Это colud захватить контакты /, контакты / создать, контакты / редактировать ...



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.