Laravel: Holen Sie sich die Basis-URL


181

Einfache Frage, aber die Antwort scheint ziemlich schwer zu finden. In Codeigniter konnte ich den URL-Helfer laden und dann einfach tun

echo base_url();

um die URL meiner Site zu erhalten. Gibt es ein Äquivalent in Laravel?

Antworten:


281

Sie können die URL-Fassade verwenden, mit der Sie den URL-Generator aufrufen können

So können Sie tun:

URL::to('/');

Sie können auch den Anwendungscontainer verwenden:

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

Oder injizieren Sie den 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
Und trotz des möglichen Erscheinungsbilds aus dem Beispiel ist dies relativ zum Stammpfad des Laravel. Wenn Sie also darin installiert sind /something/, wird die richtige URL erstellt.
Ceejayoz

@deFreitas und #ceejayoz Wie verwende ich URL :: to mit Laravel-Lokalisierung?
Mubashar Iqbal

1
@MubasharIqbal Wenn ich Ihre Frage verstanden habe, {{URL::to('/my-page.html')}}beim Betrachten und echo URL::to('/my-page.html');beim Code
deFreitas

netter handler, in meinem fall: <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">danke!
Joelmez4

156

Laravel <5.2

echo url();

Laravel> = 5.2

echo url('/');

Hoffe das hilft dir


4
Könnten Sie diese Antwort um eine Erklärung anstelle eines Code-Snippets erweitern?

2
Prüfung: Ich habe eine Site in local: localhost / abc In Codeigniter: echo base_url (); => Ich bekomme localhost / abc In Laravel: echo url (); => Ich bekomme auch localhost / abc .
Nguyễn Thành Bồi

1
Verwenden Sie dies für eine URL mit Segmentierung: url (). '/'. \ Request :: segment (1). '/'. \ Request :: segment (2)
0x1ad2

20
Beachten Sie, dass dies in 5.2 nicht mehr funktioniert: github.com/laravel/framework/issues/11479 Sie können url('/')jedoch stattdessen verwenden
4lun

1
asset('/')scheint mir besser zu sein, weil es einen abschließenden Schrägstrich hat, der in base href notwendig ist.
vintproykt

47

Für Laravel 5 verwende ich normalerweise:

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

Ich bin der Auffassung, dass die Verwendung der url()Funktion dasselbe aufruft FacadewieURL::to()


4
Hinweis: Wenn Ihre Website über https bereitgestellt wird, können Sie die secure_url()Funktion auf die gleiche Weise verwenden. Dadurch wird ein https-Link erstellt. Bei Verwendung url()auf einer https-Site wird weiterhin ein http-Link erstellt.
DrewT

1
Dieser hat für mich gearbeitet. Auch nützlich, um die Secure_url () -Syntax zu kennen. Vielen Dank.
Jimmyplaysdrums

1
Ich benutze Lumen 5.4. Dort url()wird basierend auf dem Protokoll der Anforderung ein http- oder https-Link generiert. Auf der anderen Seite secure_url()existiert nicht. Hat sich dies auch in Laravel 5.4 geändert?
Andreas Linnert

Nein, es ist Teil von Larvel 5.4. Ich kann nicht wirklich kommentieren, da ich Lumen noch nie verwendet habe, aber die 5.4 Laravel-Dokumentation für secure_url()ist hier verfügbar: laravel.com/docs/5.4/helpers#method-secure-url
DrewT

23

Aktualisierungen der Dokumentation zur Laravel-Version (5.7) von 2018 mit einigen weiteren url () -Funktionen und deren Verwendung.

Frage: Um die URL der Site in Laravel zu erhalten?

Dies ist eine Art allgemeine Frage, also können wir sie aufteilen.

1. Zugriff auf die Basis-URL

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

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

2. Zugriff auf die aktuelle 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. URLs für benannte Routen

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

4. URLs zu Assets (öffentlich)

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

5. Datei-URLs

use Illuminate\Support\Facades\Storage;

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

Auf jede dieser Methoden kann auch über die URL-Fassade zugegriffen werden:

use Illuminate\Support\Facades\URL;

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

Aufrufen dieser Hilfsfunktionen aus Blade-Vorlagen (Ansichten) bei Verwendung.

// 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

Damit es mit nicht hübschen URLs funktioniert, musste ich Folgendes tun:

asset('/');

3
Für meine Bedürfnisse ist dies das Beste<base href="{{ asset('/') }}" />
rneves

Hut ab! Es passt genau in <base href="..."/>wegen des
abschließenden

13

Laravel bietet eine Reihe von Hilfsfunktionen und für Ihre Anforderungen können Sie einfach

Verwenden Sie die Funktion url () von Laravel Helpers

Im Fall von Laravel 5.2 müssen Sie jedoch die URL ('/') verwenden.

Hier ist die Liste aller anderen Hilfsfunktionen von Laravel


@sambellerose und möchten Sie auf innere Ordner / Dateien zugreifen, die Sie tun könnenurl('/css/style.css')
Akshay Khale

13

Dies:

echo url('/');

Und das:

echo asset('/');

beide haben in meinem Fall die Home-URL angezeigt :)


3

Andere Möglichkeit: {{ URL::route('index') }}


Sie sind sich nicht sicher, warum dies abgelehnt wurde, da es tatsächlich funktioniert und auch niemand die Option gab?
CptChaos

2
Nicht meine Ablehnung, aber ich vermute, der Grund ist, dass Sie nicht garantieren können, dass die Benennung Ihrer Root-Route in jeder App "Index" ist.
Jonathan

3

Sie können auch URL :: to ('/') verwenden, um Bilder in Laravel anzuzeigen. Siehe unten:

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

Angenommen, Ihr Bild wird unter "public / images" gespeichert.


3

Um nur die von Ihnen konfigurierte App-URL abzurufen, können Sie Folgendes verwenden:

Config::get('app.url')

Diese Definition wird nur in Laravel cli verwendet. app.urles scheint ein Fallback zu sein
Wallace Maxters

1
Nun, env ('APP_URL') wäre wahrscheinlich die beste Option.
Kenyon

2

Ich habe dies verwendet und es hat bei mir in Laravel 5.3.18 funktioniert:

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

WICHTIGER HINWEIS: Dies funktioniert nur, wenn Sie "public" bereits von Ihrer URL entfernt haben. Schauen Sie sich dazu dieses hilfreiche Tutorial an .


2

Übrigens, wenn Ihre Route einen Namen hat wie:

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

Sie können die route()Funktion folgendermaßen verwenden:

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

Weitere nützliche Funktionen:

$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

Überprüfen Sie dies -

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

Das funktioniert für mich und ich hoffe, es wird für Sie funktionieren.


1

Sie können Fassaden oder Hilfsfunktionen wie folgt verwenden.

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

Laravel verwendet Symfony Component for Request, interne Laravel-Logik wie folgt.

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

Sie können es von Request bei Laravel 5 erhalten

request()->getSchemeAndHttpHost();

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.