Кнопка назад Laravel


86

Я намагаюся створити просту кнопку "Назад" на сторінці. Користувач може перейти на цю сторінку з двох різних сторінок, тому я хотів би знати, з якої сторінки він прибув. Це можливо?


2
{{ url()->previous() }}в Laravel 5
Коннор Ліч

Відповіді:


145

У Laravel ви можете зробити щось подібне: <a href="{{ Request::referrer() }}">Back</a>(за умови, що ви використовуєте Blade).

Laravel 4

{{ URL::previous() }}

Laravel 5+

{{ url()->previous() }}

Документація Laravel


Дякую, це працює !! Не вдалося знайти це в документації ... чи є де-небудь ще, де я можу отримати більше користі від laravel?
cosapostolo

2
Ви можете ознайомитися з документацією , скористатися їхніми форумами , переглянути джерело в папці laravel або повісити в їхньому IRC-каналі #laravel на freenode. Наполегливо рекомендую каналу IRC багато доброзичливих та корисних людей, які відповідають на ваші запитання вдень та вночі.
Анон,

21
@yannishristofakis Чи використовуєте ви Laravel 4? Поведінка URL-адреси змінилася, тому використовуйте URL::previous()замість цього.
Markus Hofmann

2
Запит :: заголовок ("реферал");
Рамеш

1
проблема з цим та підходом URL :: previous () полягає в тому, що він базується на рефералі http. 1) Це може бути встановлено не всіма агентами користувачів, тому ви не можете на нього покладатися весь час. 2) Більше того, якщо він встановлений, але ви відвідуєте конкретну сторінку за посиланням із зовнішнього джерела, ви повернетесь до цього джерела.
morksinaanab

70

Я знаю, що це старовинне питання, але я знайшов його, шукаючи те саме рішення. Здається, вищевказане рішення не працює в Laravel 4, однак ви можете скористатися цим зараз:

<a href="{{ URL::previous() }}">Go Back</a>

Сподіваюся, це допомагає людям, які шукають цю функцію в L4

(Джерело: https://github.com/laravel/framework/pull/501/commits )



18

Справді, використання {{ URL:previous() }}виконує роботу, але якщо ви використовуєте один і той самий маршрут для відображення декількох подань, це поверне вас до першої кінцевої точки цього маршруту.

У моєму випадку у мене є іменований маршрут, який на основі вибраного користувачем параметру може відображати 3 різні види. Звичайно, у мене є варіант за замовчуванням для першого входу в цей маршрут, коли користувач ще не вибрав жодної опції.

Коли я використовую URL:previous(), Laravel повертає мене до подання за замовчуванням, навіть якщо користувач вибрав інший варіант. Тільки використовуючи javascript всередині кнопки, яку я досягнув, щоб повернутись до правильного подання:

<a href="javascript:history.back()" class="btn btn-default">Voltar</a>

Я тестував це на Laravel 5.3, лише для уточнення.


17

Нижче наведено повне рішення Blade (шаблонний механізм, який використовує Laravel):

{!! link_to(URL::previous(), 'Cancel', ['class' => 'btn btn-default']) !!}

Масив параметрів із класом необов’язковий, у цьому випадку він визначає стиль для кнопки Bootstrap 3.


1
Потрібно змінити одну річ, замість {{...}} потрібно використовувати {!! ... !!} інакше рядок буде екранованим.
happyhardik

1
Правда, на той час це працювало в Laravel 4, перш ніж їх вдалося втекти за замовчуванням. Оновлено для роботи з поточними версіями Laravel. Дякую :)
mike.bronner



2

Ви можете використовувати javascript для цієї проблеми. Це посилання з історії браузера.

<script>
function goBack() {
  window.history.back();
}
</script>
<button onclick="goBack()">Go Back</button>


0

Ви можете використовувати {{URL :: previous ()}} Але це не ідеальний UX.

Наприклад, коли ви натискаєте кнопку F5 і знову натискаєте кнопку "Назад" за допомогою {{URL :: previous ()}}, ви залишатиметесь тут.

Хорошим способом є використання {{route ('page.edit', $ item-> id)}}, це завжди правдива сторінка, яку ви хочете перенаправити.


0
<a href="{{ url()->previous() }}" class="btn btn-warning"><i class="fa fa-angle-left"></i> Continue Shopping</a>

Це працювало в Laravel 5.8

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.