Jak uzyskać bieżący adres URL wewnątrz instrukcji @if (Blade) w Laravel 4?


269

Używam Laravela 4. Chciałbym uzyskać dostęp do bieżącego adresu URL wewnątrz @ifwarunku w widoku za pomocą silnika szablonów Laravel's Blade, ale nie wiem, jak to zrobić.

Wiem, że można to zrobić za pomocą czegoś takiego, <?php echo URL::current(); ?>ale nie jest to możliwe w @ifinstrukcji typu blade.

Jakieś sugestie?


czy jakaś odpowiedź poniżej pomogła w rozwiązaniu problemu?
N69S

Odpowiedzi:


358

Możesz użyć: Request::url()aby uzyskać bieżący adres URL, oto przykład:

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

Laravel oferuje metodę sprawdzania, czy adres URL pasuje do wzorca, czy nie

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

Sprawdź powiązaną dokumentację, aby uzyskać różne informacje dotyczące wniosku: http://laravel.com/docs/requests#request-information


2
<li {{(Request :: is ('admin / dashboard')? 'class = "active"': '')}}> próbowałem tego, nie powiodło się: x
TransformBinary

4
W moim przypadku użyłem początkowego / dla adresu URL, usunięcie go rozwiązałoby problem
Joaquín L. Robles

@Andreyco co zrobić, jeśli muszę umieścić baner na wszystkich stronach oprócz strony głównej, spróbuj to nie działa@if(Request::url()!=='/') <div class="bannerImage">{{ HTML::image('images/fullimage3.jpg') }}</div> @endif
Yousef Altaf

4
Używam do tego następnego formatu: <li {!! (Request :: url () == url ('/'))? 'class = "active"': '' !!}>, ponieważ format z {{some_code}} używa kodowania ciągów.
Viktor,

3
url() teraz zwraca instancję konstruktora . trzeba użyćurl()->current()
Jeff Puckett

92

Możesz także użyć Route::current()->getName()do sprawdzenia nazwy trasy.

Przykład: trasy.php

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

Widok:

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

38
FYI, Route::is('testing')jest taki sam jak Route::current()->getName() == 'testing'.
Hkan

@Hkan Nie oba są różne, Route::is('testing')- >> testowanie nie zadziała Route::is('test')- >> test zadziała Route::current()->getName() == 'testing'alias i adres URL są różne
Naveen Singh raghuvanshi

1
@Naveen nie, Route::is()sprawdza nazwę trasy, a nie ścieżkę.
Hkan

1
również stenografiaRoute::currentRouteName()
Jeff Puckett

@Hkan Tak, ale to nie będzie działać podczas pracy z parametrami w adresie URL, na przykład, żetony ...
Patros

66

Może powinieneś spróbować:

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

47

Zrobiłbym to w ten sposób:

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

gdzie „/ view” to nazwa widoku w route.php.


Jak stwierdzić, czy obecny katalog jest w domu? Mam na myśli, publiczne /. Ach, rozumiem, =='public'
piszę

1
Jeśli katalog domowy to „/” w route.php, po prostu piszesz== '/')
Jucaman

Jak sprawiłbyś, żeby działał również z parametrami? Nie tylko nazwa trasy.
Pathros

Parametry można łączyć na wiele sposobów po nazwie trasy, w zależności od konfiguracji tras.
Jucaman

Robię to w ten sposób: Request::url()- niż otrzymasz pełny adres URL
Derk Jan Speelman

37

Aby dostać się current urlw bladewidoku można użyć następujących,

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

Aby porównać, używając następującego kodu,

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

2
Jeśli chcesz również pobrać ciąg zapytania do bloku, możesz użyć tego, request()->getQueryString()co jest bardzo pomocne w połączeniu z url()->current()tym, że pozostawia ciąg zapytania.
Spencer O'Reilly,

25

Pomogło mi to w przypadku aktywnej klasy bootstrap Nav w 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
Dziękuję, znałem kod, ale Google dostał mnie tutaj w 5 sekund haha.

Również to samo działa z laravel 4.2 i działa dobrze. Dziękuję
Vipertecpro,

Działa również na laravel 5.6, dzięki ... to właśnie uratowało mnie od podejmowania navs dla każdego widoku: D
LaravDev

19

Trochę stary, ale działa w L5:

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

Przechwytuje to zarówno / mycategory jak / / mycategory / slug


1
Używam{{ Request::is('clientes/*') ? 'active' : ''}}
Alex Angelico

16

Laravel 5.4

Funkcje globalne

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

To nie zawsze działa, jeśli masz do czynienia z ciągiem zapytania takim jak domain.com/?page_id=1, domain.com/?page_id=2, ponieważ te adresy URL również są równe „/”
Ryan S

Użyłemrequest()->routeIs('...')
Lachezar Todorov

15

Osobiście nie próbowałbym uchwycić go w widoku. Nie jestem niesamowity w Laravel, ale wyobrażam sobie, że musisz wysłać swoją trasę do kontrolera, a następnie w kontrolerze przekazać zmienną (za pomocą tablicy) do swojego widoku, używając czegoś podobnego $url = Request::url();.

Tak czy inaczej, jest to jeden ze sposobów.

EDYCJA: Właściwie spójrz na powyższą metodę, prawdopodobnie lepszy sposób.


11

Prosty pasek nawigacyjny z bootstrapem można wykonać jako:

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

9

Najprostszym sposobem jest użycie: Request::url();

Ale tutaj jest złożony sposób:

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

9

Można to zrobić na dwa sposoby:

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

lub

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

8

Powinieneś spróbować:

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

7

Ustaw ten kod, aby był stosowany automatycznie dla każdego <li>+, którego potrzebujesz, aby użyć HTMLBuilderbiblioteki w swoim projekcie Laravel

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

7

Możesz użyć tego kodu, aby uzyskać bieżący adres URL:

echo url()->current();

echo url()->full();

Dostaję to z dokumentów Laravela.


5

Kolejny sposób na napisanie if i else w Laravel przy użyciu ścieżki

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

Mam nadzieję, że to pomoże


4

zamiast używać URL :: path () do sprawdzania aktualnej lokalizacji ścieżki, możesz rozważyć Route :: currentRouteName (), więc na wypadek, gdybyś zaktualizował swoją ścieżkę, nie musisz przeglądać wszystkich stron, aby zaktualizować nazwa ścieżki ponownie.




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

Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość.
rollstuhlfahrer

1

Spróbuj tego:

@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

Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. Właściwe wyjaśnienie byłoby znacznie poprawić swoją długoterminową wartość pokazując dlaczego jest to dobre rozwiązanie problemu, a byłoby bardziej użyteczne dla czytelników przyszłości z innymi, podobnymi pytaniami. Proszę edytować swoją odpowiedź dodać kilka wyjaśnień, w tym założeń już wykonanych.
jhpratt GOFUNDME RELICENSING

0

Spróbuj tego:

<li class="{{ Request::is('Dashboard') ? 'active' : '' }}">
    <a href="{{ url('/Dashboard') }}">
	<i class="fa fa-dashboard"></i> <span>Dashboard</span>
    </a>
</li>



0

Najprostszy sposób to

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

Ta kolumna przechwytuje kontakty /, kontakty / tworzenie, kontakty / edycja ...



-1

Wypróbuj w ten sposób:

<a href="{{ URL::to('/registration') }}">registration </a>

Dodaj wyjaśnienie do swojej odpowiedzi
Pankaj Makwana
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.