Laravel: Получить базовый URL


182

Простой вопрос, но ответ кажется довольно сложным. В Codeigniter, я мог бы загрузить помощника URL, а затем просто сделать

echo base_url();

чтобы получить URL моего сайта. Есть ли эквивалент в Laravel?

Ответы:


282

Вы можете использовать фасад фасада, который позволяет вам звонить генератору URL.

Так что вы можете сделать:

URL::to('/');

Вы также можете использовать контейнер приложения:

$app->make('url')->to('/');
$app['url']->to('/');
App::make('url')->to('/');

Или введите UrlGenerator:

<?php
namespace Vendor\Your\Class\Namespace;

use Illuminate\Routing\UrlGenerator;

class Classname
{
    protected $url;

    public function __construct(UrlGenerator $url)
    {
        $this->url = $url;
    }

    public function methodName()
    {
        $this->url->to('/');
    }
}

3
И несмотря на его возможное появление из примера, это относительно корневого пути Laravel, поэтому, если вы установлены в /something/нем, вы получите правильный URL.
ceejayoz

@deFreitas и #ceejayoz, как использовать URL :: to с локализацией laravel?
Мубашар Икбал

1
@MubasharIqbal Если я понял ваш вопрос, {{URL::to('/my-page.html')}}при взгляде и echo URL::to('/my-page.html');в коде
deFreitas

хороший обработчик, в моем случае:, <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">спасибо!
joelmez4

157

Laravel <5.2

echo url();

Laravel> = 5.2

echo url('/');

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


4
Не могли бы вы расширить этот ответ, включив в него объяснение, а не просто фрагмент кода?

2
Экзамен: у меня есть сайт в местном: localhost / abc В Codeigniter: echo base_url (); => Я получаю localhost / abc В Laravel: echo url (); => Я тоже получаю localhost / abc .
Нгуен Тхань Бхи

1
Используйте это для URL с сегментацией: url (). '/'. \ Request :: сегмент (1). '/'. \ Запрос :: сегмент (2)
0x1ad2

20
Обратите внимание, что это больше не работает в 5.2: github.com/laravel/framework/issues/11479 Вы можете использовать url('/')вместо этого однако
4lun

1
asset('/')мне кажется лучше, потому что он имеет косую черту, которая необходима в базовом href.
Винтпроект

47

Для Laravel 5 я обычно использую:

<a href="{{ url('/path/uri') }}">Link Text</a>

Я понимаю, что использование url()функции вызывает так же, FacadeкакURL::to()


4
Примечание. Если ваш веб-сайт обслуживается по протоколу https, вы можете использовать эту secure_url()функцию аналогичным образом, и при этом будет создана ссылка https. Использование url()на сайте https будет по-прежнему создавать ссылку http.
DrewT

1
Этот работал для меня. Также полезно знать синтаксис secure_url (). Спасибо.
jimmyplaysdrums

1
Я использую Lumen 5.4. Там url()генерирует http или https ссылку на основе протокола запроса. С другой стороны secure_url()не существует. Изменилось ли это и в Laravel 5.4?
Андреас Линнерт

Нет, это часть Larvel 5.4. Я не могу комментировать, потому что я никогда не использовал Lumen, но документация 5.4 для Laravel secure_url()доступна здесь: laravel.com/docs/5.4/helpers#method-secure-url
DrewT

23

Обновление документации 2018 года выпуска Laravel (5.7) с некоторыми дополнительными функциями url () и его использованием.

Вопрос: Получить URL сайта в Laravel?

Это своего рода общий вопрос, поэтому мы можем разделить его.

1. Доступ к базовому URL

// Get the base URL.
echo url('');

// Get the app URL from configuration which we set in .env file.
echo config('app.url'); 

2. Доступ к текущему URL

// Get the current URL without the query string.
echo url()->current();

// Get the current URL including the query string.
echo url()->full();

// Get the full URL for the previous request.
echo url()->previous();

3. URL для именованных маршрутов

// http://example.com/home
echo route('home');

4. URL-адреса активов (общедоступные)

// Get the URL to the assets, mostly the base url itself.
echo asset('');

5. Файловые URL

use Illuminate\Support\Facades\Storage;

$url = Storage::url('file.jpg'); // stored in /storage/app/public
echo url($url);

К каждому из этих методов можно также получить доступ через фасад URL:

use Illuminate\Support\Facades\URL;

echo URL::to(''); // Base URL
echo URL::current(); // Current URL

Как вызывать эти вспомогательные функции из шаблона Blade (Views) с использованием.

// http://example.com/login
{{ url('/login') }}

// http://example.com/css/app.css
{{ asset('css/app.css') }}

// http://example.com/login
{{ route('login') }}

// usage

<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">

<!-- Login link -->
<a class="nav-link" href="{{ route('login') }}">Login</a>

<!-- Login Post URL -->
<form method="POST" action="{{ url('/login') }}">

17

Чтобы заставить его работать с не симпатичными URL, я должен был сделать:

asset('/');

3
Для моей потребности это лучший<base href="{{ asset('/') }}" />
rneves

Слава тебе! Это подходит как раз <base href="..."/>из-за косой черты
vintproykt

13

Laravel предоставляет множество вспомогательных функций, и по вашему желанию вы можете просто

использовать функцию url () помощников Laravel

но в случае с Laravel 5.2 вам придется использовать url ('/')

вот список всех других вспомогательных функций Laravel


@sambellerose и хотите ли вы получить доступ к внутренним папкам / файлам, которые вы можете сделатьurl('/css/style.css')
Акшай Кхале

13

Это:

echo url('/');

И это:

echo asset('/');

оба отобразили домашний URL в моем случае :)


3

Другая возможность: {{ URL::route('index') }}


Не знаете, почему за это проголосовали, так как на самом деле это работает, и никто не дал такой возможности?
CptChaos

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

3

Вы также можете использовать URL :: to ('/') для отображения изображения в Laravel. Пожалуйста, смотрите ниже:

<img src="{{URL::to('/')}}/images/{{ $post->image }}" height="100" weight="100"> 

Предположим, что ваше изображение хранится в «public / images».


3

Чтобы просто получить URL-адрес приложения, которое вы настроили, вы можете использовать:

Config::get('app.url')

Это определение используется только в Laravel cli. app.urlпохоже, это запасной вариант
Уоллес Макстерс

1
Ну, больше, вероятно, env ('APP_URL') будет лучшим вариантом.
Кеньон

2

Я использовал это, и это сработало для меня в Laravel 5.3.18:

<?php echo URL::to('resources/assets/css/yourcssfile.css') ?>

ВАЖНОЕ ПРИМЕЧАНИЕ. Это будет работать только в том случае, если вы уже удалили «public» из своего URL. Для этого вы можете проверить этот полезный учебник .


2

Кстати, если у вашего маршрута есть имя вроде:

Route::match(['get', 'post'], 'specialWay/edit', 'SpecialwayController@edit')->name('admin.spway.edit');

Вы можете использовать route()функцию следующим образом:

<form method="post" action="{{route('admin.spway.edit')}}" class="form form-horizontal" id="form-spway-edit">

Другие полезные функции:

$uri = $request->path();
$url = $request->url();
$url = $request->fullUrl();
asset()
app_path();
// ...

https://github.com/laravel/framework/blob/5.4/src/Illuminate/Foundation/helpers.php


2

Проверь это -

<a href="{{url('/abc/xyz')}}">Go</a>

Это работает для меня, и я надеюсь, что это будет работать для вас.


1

Вы можете использовать фасады или вспомогательные функции, как описано ниже.

echo URL::to('/');
echo url();

Laravel использует Symfony Component for Request, внутреннюю логику Laravel, как описано ниже.

namespace Symfony\Component\HttpFoundation;
/**
* {@inheritdoc}
*/
protected function prepareBaseUrl()
{
    $baseUrl = $this->server->get('SCRIPT_NAME');

    if (false === strpos($this->server->get('REQUEST_URI'), $baseUrl)) {
        // assume mod_rewrite
        return rtrim(dirname($baseUrl), '/\\');
    }

    return $baseUrl;
}

0

Я нашел другой способ просто получить базовый URL для отображения значения переменной окружения APP_URL

env('APP_URL')

который будет отображать базовый URL-адрес, например http: // domains_your // yours_website . будьте осторожны, предполагается, что вы установили переменную окружения в файле .env (который находится в корневой папке).


0

вы можете получить его по запросу, на уровне 5

request()->getSchemeAndHttpHost();

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