Laravel: Отримайте базовий URL


182

Питання просте, але відповідь здається досить важким. У Codeigniter я можу завантажити помічник URL-адреси, а потім просто зробити

echo base_url();

щоб отримати URL-адресу мого сайту. Чи є еквівалент у Laravel?

Відповіді:


282

Ви можете використовувати фасад URL-адрес, який дозволяє здійснювати дзвінки до генератора 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

156

Ларавель <5.2

echo url();

Ларавель> = 5,2

echo url('/');

Сподіваюся, це вам допоможе


4
Чи можете ви розширити цю відповідь, щоб включити пояснення замість просто фрагмента коду?

2
Іспит: у мене є місцевий сайт: localhost / abc In Codeigniter: echo base_url (); => Я отримую localhost / abc In Laravel: echo url (); => Я також отримую localhost / abc .
Nguyễn Thành Bồi

1
Використовуйте це для URL-адреси з сегментацією: url (). '/'. \ Запит :: сегмент (1). '/'. \ Запит :: сегмент (2)
0x1ad2

20
Зауважте, що це більше не працює в 5.2: github.com/laravel/framework/isissue/11479 Ви можете використовувати url('/')замість цього
4lun

1
asset('/')мені здається краще, тому що він має останню косу косу рису, яка необхідна в базовій href.
vintproykt

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

Оновлення документації щодо випуску Laravel (5.7) 2018 року з деякими додатковими функціями 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

Як викликати ці функції помічників із шаблону леза (Перегляди) із використанням.

// 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="..."/>через косу
рису

13

Laravel пропонує безліч допоміжних функцій, і для вашої потреби ви можете просто

використовувати url () функцію Laravel Helpers

але у випадку Laravel 5.2 вам доведеться використовувати URL ('/')

ось список усіх інших допоміжних функцій Laravel


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

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. 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 для запиту, внутрішню логіку 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 // Your_website . будьте уважні, він передбачає, що ви встановили змінну середовища у .env-файл (який присутній у кореневій папці).


0

Ви можете отримати його із Запити, за адресою laravel 5

request()->getSchemeAndHttpHost();

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