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?

Inigo
quelle

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('/');
    }
}
hannesvdvreken
quelle
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

Nguyễn Thành Bồi
quelle
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()

DrewT
quelle
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') }}">
Sobin Augustine
quelle
17

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

asset('/');
dan-klasson
quelle
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

Akshay Khale
quelle
@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 :)

GGadash
quelle
3

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

CptChaos
quelle
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.

Niladri Banerjee - Uttarpara
quelle
3

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

Config::get('app.url')
Kenyon
quelle
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 .

ITWitch
quelle
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

闫 鹏程
quelle
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.

msayubi76
quelle
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;
}
Paresh Barad
quelle
0

Ich habe einen anderen Weg gefunden, um einfach die Basis-URL zum Anzeigen des Werts der Umgebungsvariablen APP_URL zu erhalten

env('APP_URL')

Daraufhin wird die Basis-URL wie http: // Domains_Ihre // Ihre_Website angezeigt . Beachten Sie, dass davon ausgegangen wird, dass Sie die Umgebungsvariable in der ENV-Datei festgelegt haben (die sich im Stammordner befindet).

Adeel Raza Azeemi
quelle
0

Sie können es von Request bei Laravel 5 erhalten

request()->getSchemeAndHttpHost();
Soleil
quelle
-1

Ich habe auch base_path () Funktion verwendet und es hat funktioniert

Minh Anh Vương
quelle