Laravel: Uzyskaj podstawowy adres URL

182

Proste pytanie, ale odpowiedź wydaje się dość trudna do uzyskania. W Codeigniter mogłem załadować pomocnika adresu URL, a następnie po prostu zrobić

echo base_url();

aby uzyskać adres URL mojej witryny. Czy w Laravel istnieje odpowiednik?

Inigo
źródło

Odpowiedzi:

282

Możesz użyć elewacji URL, która pozwala wykonywać połączenia z generatorem URL

Możesz więc zrobić:

URL::to('/');

Możesz również użyć kontenera aplikacji:

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

Lub wstrzyknij 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('/');
    }
}
Hannesvdvreken
źródło
3
I pomimo możliwego wyglądu z przykładu, jest to względne w stosunku do ścieżki root Laravela, więc jeśli jesteś w /something/nim zainstalowany , zrobi właściwy adres URL.
ceejayoz
@deFreitas i #ceejayoz jak używać URL :: do z lokalizacją laravel?
Mubashar Iqbal
1
@MubasharIqbal Jeśli zrozumiałem twoje pytanie, {{URL::to('/my-page.html')}}w widoku i echo URL::to('/my-page.html');na kod
deFreitas
miły przewodnik, w moim przypadku: <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">dzięki!
joelmez4,
156

Laravel <5.2

echo url();

Laravel> = 5,2

echo url('/');

Mam nadzieję, że to ci pomoże

Nguyễn Thành Bồi
źródło
4
Czy możesz rozszerzyć tę odpowiedź, aby zawierała wyjaśnienie zamiast fragmentu kodu?
2
Egzamin: Mam witrynę w lokalnym: localhost / abc W Codeigniter: echo base_url (); => Dostaję localhost / abc W Laravel: echo url (); => Dostaję także localhost / abc .
Nguyễn Thành Bồi
1
Użyj tego dla adresu URL z segmentacją: url (). '/'. \ Request :: segment (1). '/'. \ Request :: segment (2)
0x1ad2,
20
Zauważ, że to już nie działa w 5.2: github.com/laravel/framework/issues/11479 Możesz jednak użyć url('/')zamiast tego
4lun
1
asset('/')wydaje mi się lepszy, ponieważ ma końcowy ukośnik, który jest niezbędny w bazie href.
vintproykt
47

W przypadku Laravel 5 zwykle używam:

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

Rozumiem, że używanie url()funkcji wywołuje to samo, FacadecoURL::to()

DrewT
źródło
4
Uwaga: jeśli witryna jest obsługiwana przez https, możesz korzystać z secure_url()tej samej funkcji, a to spowoduje utworzenie łącza https. Korzystanie url()z witryny https nadal będzie generować link http.
DrewT,
1
Ten działał dla mnie. Przydatna jest również znajomość składni secure_url (). Dzięki.
jimmyplaysdrums
1
Używam Lumen 5.4. Nie url()generuje http lub https związek oparty na protokole wniosku. Z drugiej strony secure_url()nie istnieje. Czy ta zmiana dotyczyła również Laravela 5.4?
Andreas Linnert
Nie, jest częścią Larvel 5.4. Naprawdę nie mogę komentować, ponieważ nigdy nie korzystałem z Lumen, ale dokumentacja 5.4 Laravela dla secure_url()jest dostępna tutaj: laravel.com/docs/5.4/helpers#method-secure-url
DrewT
23

Aktualizacje dokumentacji wersji Laravel 2018 (5.7) z kilkoma dodatkowymi funkcjami url () i jej wykorzystaniem.

Pytanie: Aby uzyskać adres URL witryny w Laravel?

To rodzaj ogólnego pytania, więc możemy je podzielić.

1. Dostęp do podstawowego adresu URL

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

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

2. Dostęp do bieżącego adresu 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. Adresy URL nazwanych tras

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

4. Adresy URL do zasobów (publiczne)

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

5. Adresy URL plików

use Illuminate\Support\Facades\Storage;

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

Do każdej z tych metod można również uzyskać dostęp za pomocą fasady adresu URL:

use Illuminate\Support\Facades\URL;

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

Jak wywołać te funkcje pomocnicze z szablonu bloku (Widoki) przy użyciu.

// 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') }}">
Sobin Augustine
źródło
17

Aby działało z nie ładnymi adresami URL, musiałem:

asset('/');
dan-klasson
źródło
3
Na moje potrzeby jest to najlepsze<base href="{{ asset('/') }}" />
poniedziałek
Uznanie dla ciebie! Pasuje idealnie <base href="..."/>ze względu na końcowe
cięcie
13

Laravel zapewnia wiele funkcji pomocniczych, a na twoje potrzeby możesz po prostu

użyj funkcji url () w Laravel Helpers

ale w przypadku Laravel 5.2 będziesz musiał użyć adresu URL („/”)

Oto lista wszystkich innych funkcji pomocniczych Laravela

Akshay Khale
źródło
@sambellerose i czy chcesz uzyskać dostęp do wewnętrznych folderów / plików, które możesz zrobićurl('/css/style.css')
Akshay Khale
13

To:

echo url('/');

I to:

echo asset('/');

w moim przypadku oba wyświetliły domowy adres URL :)

GGadash
źródło
3

Inna możliwość: {{ URL::route('index') }}

CptChaos
źródło
Nie wiesz, dlaczego to zostało odrzucone, ponieważ tak naprawdę działa i nikt też nie dał takiej możliwości?
CptChaos
2
Nie moja opinia negatywna, ale zgaduję, że powodem jest to, że nie możesz zagwarantować, że nazwa trasy głównej będzie „indeksem” w każdej aplikacji.
Jonathan
3

Możesz także użyć URL :: do ('/'), aby wyświetlić obraz w Laravel. Patrz poniżej:

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

Załóżmy, że Twój obraz jest przechowywany jako „public / images”.

Niladri Banerjee - Uttarpara
źródło
3

Aby pobrać skonfigurowany adres URL aplikacji, możesz użyć:

Config::get('app.url')
Kenia
źródło
Ta definicja jest używana tylko w Laravel cli. app.urlwydaje się, że jest to
awaria
1
Cóż, env („APP_URL”) byłby prawdopodobnie najlepszą opcją.
Kenyon
2

Użyłem tego i zadziałało to dla mnie w Laravel 5.3.18:

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

WAŻNA UWAGA: Działa to tylko wtedy, gdy usunąłeś już „public” ze swojego adresu URL. Aby to zrobić, możesz sprawdzić ten pomocny samouczek .

ITWitch
źródło
2

Nawiasem mówiąc, jeśli twoja trasa ma nazwę:

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

Możesz użyć takiej route()funkcji:

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

Inne przydatne funkcje:

$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

闫 鹏程
źródło
2

Sprawdź to -

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

To działa dla mnie i mam nadzieję, że to zadziała dla ciebie.

msayubi76
źródło
1

Możesz użyć elewacji lub funkcji pomocniczej zgodnie z poniższym opisem.

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

Laravel przy użyciu komponentu Symfony do żądania, wewnętrzna logika Laravela zgodnie z poniższym opisem.

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;
}
Paresh Barad
źródło
0

Znalazłem inny sposób, aby po prostu uzyskać adres URL do wyświetlania wartości zmiennej środowiskowej APP_URL

env('APP_URL')

który wyświetli podstawowy adres URL, taki jak http: // domains_your // twoja_strona internetowa . uwaga: zakłada się, że zmienna środowiskowa została ustawiona w pliku .env (który znajduje się w folderze głównym).

Adeel Raza Azeemi
źródło
0

możesz go pobrać z Żądania, na laravel 5

request()->getSchemeAndHttpHost();
Soleil
źródło
-1

Użyłem również fusion base_path () i zadziałało

Minh Anh Vương
źródło