Laravel: Obtener URL base


182

Pregunta simple, pero la respuesta parece bastante difícil de encontrar. En Codeigniter, podría cargar el asistente de URL y luego simplemente hacer

echo base_url();

para obtener la URL de mi sitio. ¿Hay un equivalente en Laravel?

Respuestas:


282

Puede usar la fachada de URL que le permite hacer llamadas al generador de URL

Entonces puedes hacer:

URL::to('/');

También puede usar el contenedor de la aplicación:

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

O inyecte el 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
Y a pesar de su posible aparición en el ejemplo, esto es relativo a la ruta raíz de Laravel, por lo que si está instalado en /something/él, obtendrá la URL correcta.
ceejayoz

@deFreitas y #ceejayoz ¿cómo usar URL :: to con la localización de laravel?
Mubashar Iqbal

1
@MubasharIqbal Si entendí tu pregunta, {{URL::to('/my-page.html')}}a la vista y echo URL::to('/my-page.html');en el código
deFreitas

buen manejador, en mi caso: <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">¡gracias!
joelmez4

157

Laravel <5.2

echo url();

Laravel> = 5.2

echo url('/');

Espero que esto te ayude


44
¿Podría ampliar esta respuesta para incluir una explicación en lugar de solo un fragmento de código?

2
Examen: Tengo un sitio en local: localhost / abc En Codeigniter: echo base_url (); => Obtengo localhost / abc en Laravel: echo url (); => También obtengo localhost / abc .
Nguyễn Thành Bồi

1
Use esto para una url con segmentación: url (). '/'. \ Request :: segmento (1). '/'. \ Request :: segmento (2)
0x1ad2

20
Tenga en cuenta que esto ya no funciona en 5.2: github.com/laravel/framework/issues/11479url('/') Sin embargo, puede usar en su lugar
4lun

1
asset('/')me parece mejor porque tiene una barra diagonal que es necesaria en base href.
vintproykt

47

Para Laravel 5, normalmente uso:

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

Entiendo que usar la url()función es llamar lo mismo FacadequeURL::to()


44
Nota: si su sitio web se sirve a través de https, puede usar la secure_url()función de la misma manera, y esto producirá un enlace https. El uso url()en un sitio https seguirá produciendo un enlace http.
DrewT

1
Este me funcionó. También es útil para conocer la sintaxis secure_url (). Gracias.
jimmyplaysdrums

1
Estoy usando Lumen 5.4. Allí url()genera un enlace http o https basado en el protocolo de la solicitud. Por otro lado secure_url()no existe. ¿Esto también cambió en Laravel 5.4?
Andreas Linnert

No, es parte de Larvel 5.4. Realmente no puedo comentar porque nunca he usado Lumen, pero la documentación de 5.4 Laravel secure_url()está disponible aquí: laravel.com/docs/5.4/helpers#method-secure-url
DrewT

23

Actualizaciones de la documentación de la versión Laravel 2018 (5.7) con algunas funciones más url () y su uso.

Pregunta: ¿Para obtener la URL del sitio en Laravel?

Esta es una pregunta general, por lo que podemos dividirla.

1. Acceso a la URL base

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

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

2. Accediendo a la URL actual

// 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 para rutas con nombre

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

4. URL a los activos (públicos)

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

5. URL de archivo

use Illuminate\Support\Facades\Storage;

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

También se puede acceder a cada uno de estos métodos a través de la fachada de URL:

use Illuminate\Support\Facades\URL;

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

Cómo llamar a estas funciones de ayuda desde la plantilla de la hoja (Vistas) con el uso

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

Para que funcione con URL no bonitas, tuve que hacer:

asset('/');

3
Para mi necesidad, este es el mejor<base href="{{ asset('/') }}" />
rneves

¡Felicitaciones a usted! Encaja perfectamente <base href="..."/>debido a la barra inclinada final
vintproykt

13

Laravel proporciona un montón de funciones de ayuda y para su requerimiento puede simplemente

usar la función url () de Laravel Helpers

pero en el caso de Laravel 5.2 deberás usar url ('/')

Aquí está la lista de todas las demás funciones auxiliares de Laravel


@sambellerose y si quieres acceder a las carpetas / archivos internos que puedes hacerurl('/css/style.css')
Akshay Khale

13

Esta:

echo url('/');

Y esto:

echo asset('/');

ambos mostraron la URL de inicio en mi caso :)


3

Otra posibilidad: {{ URL::route('index') }}


¿No está seguro de por qué esto fue rechazado, ya que realmente funciona y nadie dio la opción también?
CptChaos

2
No es mi voto negativo, pero supongo que la razón es que no puede garantizar que el nombre de su ruta raíz sea "index" en cada aplicación.
Jonathan

3

También puede usar URL :: to ('/') para mostrar la imagen en Laravel. Por favor ver más abajo:

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

Suponga que su imagen se almacena en "public / images".


3

Para obtener la URL de la aplicación que configuró, puede usar:

Config::get('app.url')

Esta definición solo se usa en Laravel cli. app.urlparece ser una alternativa
Wallace Maxters

1
Bien, env ('APP_URL') probablemente sería la mejor opción.
Kenyon

2

Usé esto y funcionó para mí en Laravel 5.3.18:

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

NOTA IMPORTANTE: Esto solo funcionará cuando ya haya eliminado "público" de su URL. Para hacer esto, puede consultar este útil tutorial .


2

Por cierto, si su ruta tiene un nombre como:

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

Puede usar la route()función de esta manera:

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

Otras funciones útiles:

$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

Mira esto -

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

Esto está funcionando para mí y espero que funcione para usted.


1

Puede usar las fachadas o la función auxiliar según lo siguiente.

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

Laravel usando Symfony Component for Request, lógica interna de Laravel según lo siguiente.

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

Encontré otra forma de obtener la URL base para mostrar el valor de la variable de entorno APP_URL

env('APP_URL')

que mostrará la URL base como http: // domains_your // yours_website . tenga en cuenta que supone que ha establecido la variable de entorno en el archivo .env (que está presente en la carpeta raíz).


0

puede obtenerlo de Request, en laravel 5

request()->getSchemeAndHttpHost();

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.