кодесурса
«Laravel

Laravel (5.7) Генерация URL

script1adsense2code
script1adsense3code

Ваше веб-приложение вращается вокруг маршрутов и URL-адресов. В конце концов, именно они направляют ваших пользователей на ваши страницы. В конце концов, обслуживание страниц - это то, что должно делать любое веб-приложение.

Ваши пользователи могут не заинтересоваться долго, если вы обслуживаете только одну страницу, и если вы намереваетесь перемещать их по своему веб-сайту или веб-приложению, тогда вам нужно будет использовать критическую функцию Интернета, называемую гиперссылками. Чтобы создать гиперссылки, нам нужно создать URL-адреса для нашего приложения. Мы могли бы сделать это вручную, но Laravel может сэкономить нам немного усилий, предоставив несколько помощников, которые помогут в создании URL-адресов. Давайте посмотрим на эти функции.

Текущий URL

Получить текущий URL в Laravel очень просто. Просто используйте помощник URL :: current (). Давайте создадим простой маршрут для его тестирования.

<?php
// app/routes.php
Route::get('/current/url', function()
{
    return URL::current();
});

Теперь, если мы посетим наш / current / url url, мы получим следующий ответ.

http://myapp.dev/current/url

Давайте посмотрим на URL :: full () далее, вы видите, что он возвращает текущий URL.

Давайте попробуем этот последний маршрут еще раз, но на этот раз мы включим некоторые дополнительные данные в качестве параметров GET.

http://myapp.dev/current/url?foo=bar

Вы увидите, что результат URL :: current () удаляет лишние данные запроса, например так:

http://myapp.dev/current/url

Ну, метод URL :: full () немного отличается. Давайте изменим наш существующий маршрут, чтобы использовать его. Как это:

<?php
// app/routes.php
Route::get('/current/url', function()
{
    return URL::full();
});

Теперь давайте снова попробуем URL / current / url? Foo = bar. На этот раз мы получаем следующий результат:

http://myapp.dev/current/url?foo=bar

Видите ли, метод URL :: full () также включает дополнительные данные запроса.

Этот следующий на самом деле не способ получить текущий URL, но я чувствую, что он, безусловно, имеет свое место в этом подзаголовке. Видите ли, это метод получения предыдущего URL, который обозначен заголовком запроса 'referer'.

Я придумал хитрую ловушку, использующую тип ответа Redirect для отображения вывода. Посмотрите на следующий пример.

<?php
// app/routes.php
Route::get('first', function()
{
    // Redirect to the second route.
    return Redirect::to('second');
});
Route::get('second', function()
{
    return URL::previous();
});

Таким образом, наш первый маршрут перенаправляет на второй маршрут. Второй маршрут выведет URL предыдущего запроса, используя метод URL :: previous ().

Давайте посмотрим на / первый URI, чтобы увидеть, что происходит.

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

http://demo.dev/first

Видите ли, после перенаправления, метод URL :: previous дает URL для предыдущего запроса, который в этом случае является URL для первого маршрута.

Создание URL-адресов фреймворка

Этот раздел посвящен созданию URL-адресов, которые помогут нам перемещаться по различным маршрутам или страницам нашего сайта или приложения.

Давайте начнем с создания URL-адресов для конкретных URI. Мы можем сделать это используя метод URL :: to (). Как это:

<?php
// app/routes.php
Route::get('example', function()
{
    return URL::to('another/route');
});

Ответ, который мы получаем при посещении / примере, выглядит следующим образом.

http://demo.dev/another/route

Как вы можете видеть, Laravel создал URL для запрошенного нами маршрута. Вы должны заметить, что другой / маршрут не существует, но мы можем связываться с ним в любом случае. Убедитесь, что вы помните это при создании ссылок на URI.

Вы можете указать дополнительные параметры для метода URL :: to () в виде массива. Эти параметры будут добавлены в конец маршрута. Вот пример:

<?php
// app/routes.php
Route::get('example', function()
{
    return URL::to('another/route', array('foo', 'bar'));
});

Результирующая строка примет следующую форму.

http://myapp.dev/another/route/foo/bar

Если вы хотите, чтобы сгенерированные URL-адреса использовали протокол HTTPS, у вас есть два варианта. Первый вариант - передать true в качестве третьего параметра методу URL :: to (), например так:

URL::to('another/route', array('foo', 'bar'), true);

Однако, если вы не хотите предоставлять параметры для своего URL, вам нужно будет передать пустой массив или null в качестве второго параметра. Вместо этого более эффективно использовать описательный метод URL :: secure (), например так:

URL::secure('another/route');

Еще раз, вы можете передать массив параметров маршрута в качестве второго параметра метода методу URL :: secure (), например так:

URL::secure('another/route', array('foo', 'bar'));

Давайте посмотрим на метод следующего поколения. Помните ли вы, что мы узнали, как назначать псевдонимы нашим маршрутам в главе о расширенной маршрутизации? Именованные маршруты выглядят так:

<?php
// app/routes.php
Route::get('the/best/avenger', array('as' => 'ironman', function()
{
    return 'Tony Stark';
}));
Route::get('example', function()
{
    return URL::route('ironman');
});

Если мы посетим / пример маршрута, мы получим следующий ответ.

http://myapp.dev/the/best/avenger

Laravel взял наш никнейм маршрута и нашел связанный с ним URI. Если бы мы изменили URI, выходные данные также изменились бы. Это очень полезно, чтобы избежать необходимости изменять один URI для многих представлений.

Как и метод URL :: to (), метод URL :: route () может принимать массив параметров в качестве второго параметра метода. Кроме того, он вставит их в правильном порядке в URI. Давайте посмотрим на это в действии.

<?php
// app/routes.php
Route::get('the/{first}/avenger/{second}', array(
    'as' => 'ironman',
    function($first, $second) {
        return "Tony Stark, the {$first} avenger {$second}.";
    }
));
Route::get('example', function()
{
    return URL::route('ironman', array('best', 'ever'));
});

Если мы посетим следующий URL ...

http://myapp.dev/example

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

http://myapp.dev/the/best/avenger/ever

Есть один последний метод маршрутизации этого типа, который вам нужно знать, и это то, как маршрутизировать действия контроллера. На самом деле, это должно быть довольно просто, поскольку оно следует той же схеме, что и метод URL :: route (). Давайте посмотрим на пример.

<?php
// app/routes.php
// Our Controller.
class Stark extends BaseController
{
    public function tony()
    {
        return 'You can count on me, to pleasure myself.';
    }
}
// Route to the Stark controller.
Route::get('i/am/iron/man', '[email protected]');
Route::get('example', function()
{
    return URL::action('[email protected]');
});

В этом примере мы создаем новый контроллер под названием «Stark» с действием «tony ()». Мы создаем новый маршрут для действия контроллера. Далее мы создаем пример маршрута, который возвращает значение метода URL :: action (). Первым параметром этого метода является комбинация класса и действия, для которой мы хотим получить URL. Формат этого параметра идентичен тому, который мы используем для маршрутизации на контроллеры.

Если мы посетим URL-адрес / example, мы получим следующий ответ.

http://myapp.dev/i/am/iron/man

Laravel идентифицировал URL для пары действий контроллера, которую мы запросили, и доставил ее в качестве ответа. Как и в случае с другими методами, мы можем предоставить массив параметров в качестве второго параметра для метода URL :: action (). Давайте посмотрим это в действии.

<?php
// app/routes.php
// Our Controller.
class Stark extends BaseController
{
    public function tony($whatIsTony)
    {
        // ...
    }
}
// Route to the Stark controller.
Route::get('tony/the/{first}/genius', '[email protected]');
Route::get('example', function()
{
    return URL::action('[email protected]', array('narcissist'));
});

Как и в последнем примере, мы предоставляем массив с одним параметром в качестве параметра для метода URL :: action (), а Laravel создает URL-адрес контроллера, с параметром в правильном расположении.

URL-адрес, который мы получаем, выглядит следующим образом.

http://myapp.dev/tony/the/narcissist/genius

URL-адреса активов

URL-адреса ресурсов, таких как изображения, файлы CSS и JavaScript, должны обрабатываться немного по-другому. Большинство из вас будут использовать красивые URL с Laravel. Это действие переписать URL, чтобы удалить фронт-контроллер index.php, и сделать наши URL более удобными для SEO.

Однако в некоторых ситуациях вы можете не захотеть использовать красивые URL-адреса. Однако, если вы попытаетесь связать ресурс с помощью помощников, упомянутых в предыдущем подразделе, тогда будет включена часть URL index.php, и ссылки на ресурс разорвутся.

Даже с красивыми URL, мы не хотим ссылаться на наши активы, используя относительные URL, потому что наши сегменты маршрутизации будут перепутаны для структуры папок.

Помощники предоставляются для создания абсолютных URL-адресов для наших активов. Давайте посмотрим на некоторых из этих помощников.

Во-первых, у нас есть метод URL :: asset (), давайте посмотрим на него в действии. Первым параметром метода является относительный путь к активу.

<?php
// app/routes.php
Route::get('example', function()
{
    return URL::asset('img/logo.png');
});

Теперь, если мы посетим URL / пример, нас встретит следующий ответ.

http://myapp.dev/img/logo.png

Laravel создал для нас абсолютный путь к активам. Если мы хотим использовать безопасный протокол HTTPS для ссылки на наши активы, то мы можем передать true в качестве второго параметра методу URL :: asset (), например так:

<?php
// app/routes.php
Route::get('example', function()
{
    return URL::asset('img/logo.png', true);
});

Теперь мы получаем следующий ответ от / example URL.

https://demo.dev/img/logo.png

Большой! Laravel также предоставляет гораздо более информативный метод создания безопасных URL-адресов активов. Просто используйте метод URL :: secureAsset () и передайте относительный путь к вашему ресурсу.

<?php
// app/routes.php
Route::get('example', function()
{
    return URL::secureAsset('img/logo.png');
});

Ответ от этого маршрута такой же, как и в предыдущем методе.

https://demo.dev/img/logo.png

Ярлыки Поколения

Тем не менее, логика ваших взглядов должна быть короткой и аккуратной. Кроме того, это снимает напряжение с ваших пальцев.

Вот почему Laravel предоставил некоторые ярлыки для некоторых методов, доступных в классе URL.

Во-первых, у нас есть функция URL (). Он принимает параметры, идентичные методу URL :: to (), поэтому я не буду описывать их снова. Вот пример этого в действии.

<!-- app/views/example.blade.php -->
<a href="{{ url('my/route', array('foo', 'bar'), true) }}">My Route</a>

Теперь, если мы посмотрим на ссылку в исходном представлении, мы увидим следующее.

<a href="https://demo.dev/my/route/foo/bar">My Route</a>

URL был создан так же, как и метод URL :: to (). Как и прежде, существует также ярлык, который можно использовать для создания защищенного URL. Это выглядит так:

<!-- app/views/example.blade.php -->
<a href="{{ secure_url('my/route', array('foo', 'bar')) }}">My Route</a>

Функция secure_url () принимает ту же сигнатуру, что и метод URL :: secure (). Первый параметр - это маршрут, а второй - массив параметров маршрута, которые необходимо добавить.

Функция route () является ярлыком для метода URL :: route () и используется для создания URL-адресов для именованных маршрутов. Это выглядит так:

<!-- app/views/example.blade.php -->
<a href="{{ route('myroute') }}">My Route</a>

Как вы уже догадались, есть и ярлык для третьего метода генерации URL маршрута. Функция action () может использоваться в качестве ярлыка для метода URL :: action () и может использоваться для генерации ссылок на действия контроллера.

<!-- app/views/example.blade.php -->
<a href="{{ action('[email protected]') }}">My Link</a>

Как и в случае с методом URL :: action (), они могут принимать второй и третий параметры для параметров маршрута и создания безопасного URL.

<!-- app/views/example.blade.php -->
<a href="{{ action('[email protected]', array('foo'), true) }}">My Link</a>

Ярлык метода URL :: asset () - это функция asset (), и, как и все другие ярлыки, он принимает идентичные параметры функции. Вот пример:

<!-- app/views/example.blade.php -->
<img src="{{ asset('img/logo.png') }}" />

Аналогично, ярлык для URL :: secureAsset () - это функция secure_asset (). Это выглядит так:

<!-- app/views/example.blade.php -->
<img src="{{ secure_asset('img/logo.png') }}" />

Предыдущая: Laravel (5.7) Просмотров
Следующая: Laravel (5.7) Сессия

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code