Laravel: obter URL base

182

Pergunta simples, mas a resposta parece bastante difícil de encontrar. No Codeigniter, eu poderia carregar o auxiliar de url e simplesmente fazer

echo base_url();

para obter o URL do meu site. Existe um equivalente no Laravel?

Inigo
fonte

Respostas:

282

Você pode usar a fachada da URL, que permite fazer chamadas para o gerador de URL

Então você pode fazer:

URL::to('/');

Você também pode usar o contêiner do aplicativo:

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

Ou injete o 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
fonte
3
E, apesar da possível aparência do exemplo, isso é relativo ao caminho raiz do Laravel; portanto, se você estiver instalado, /something/ele criará o URL correto.
precisa
@deFreitas e #ceejayoz como usar URL :: to com localização laravel?
Mubashar Iqbal
1
@MubasharIqbal Se entendi sua pergunta, {{URL::to('/my-page.html')}}na vista e echo URL::to('/my-page.html');no código
DeFreitas
bom manipulador, no meu caso <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">:, obrigado!
joelmez4
157

Laravel <5.2

echo url();

Laravel> = 5.2

echo url('/');

Espero que isso ajude você

Nguyễn Thành Bồi
fonte
4
Você poderia expandir esta resposta para incluir uma explicação em vez de apenas um trecho de código?
2
Exame: Eu tenho site em local: localhost / abc No Codeigniter: echo base_url (); => Recebo localhost / abc No Laravel: echo url (); => Também recebo localhost / abc .
Nguyễn Thành Bồi
1
Use isso para um URL com segmentação: url (). '/'. \ Request :: segment (1). '/'. \ Request :: segment (2)
0x1ad2
20
Observe que isso não funciona mais no 5.2: github.com/laravel/framework/issues/11479url('/') No entanto, você pode usá
lo
1
asset('/')parece-me melhor porque tem uma barra final necessária no href base.
precisa saber é o seguinte
47

Para o Laravel 5, normalmente uso:

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

Eu entendo que o uso da url()função está chamando o mesmo FacadequeURL::to()

DrewT
fonte
4
Nota: se o seu site for veiculado por https, você poderá usar a secure_url()função da mesma maneira e isso produzirá um link https. O uso url()em um site https ainda produzirá um link http.
DrewT
1
Este funcionou para mim. Também é útil conhecer a sintaxe secure_url (). Obrigado.
Jimmyplaysdrums
1
Estou usando o Lumen 5.4. Não url()gera um link http ou https baseado no protocolo do pedido. Por outro lado secure_url(), não existe. Essa mudança no Laravel 5.4 também?
Andreas Linnert
Não, faz parte do Larvel 5.4. Na verdade, não posso comentar porque nunca usei o Lumen, mas a documentação do Laravel 5.4 secure_url()está disponível aqui: laravel.com/docs/5.4/helpers#method-secure-url #
DrewT
23

Atualizações da documentação da versão 2018 do Laravel (5.7) com mais algumas funções url () e seu uso.

Pergunta: Para obter o URL do site no Laravel?

Essa é uma pergunta geral, para que possamos dividir.

1. Acessando a 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. Acessando a URL atual

// 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 para rotas nomeadas

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

4. URLs para ativos (público)

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

5. URLs de arquivo

use Illuminate\Support\Facades\Storage;

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

Cada um desses métodos também pode ser acessado através da fachada da URL:

use Illuminate\Support\Facades\URL;

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

Como chamar essas funções auxiliares do modelo blade (vistas) com o 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') }}">
Sobin Augustine
fonte
17

Para fazê-lo funcionar com URLs não bonitos, eu tinha que fazer:

asset('/');
dan-klasson
fonte
3
Para minha necessidade este é o melhor<base href="{{ asset('/') }}" />
rneves
Parabéns a você! Ele se encaixa apenas direito em <base href="..."/>causa de barra invertida
vintproykt
13

O Laravel fornece várias funções auxiliares e, para sua exigência, você pode simplesmente

use a função url () dos Laravel Helpers

mas no caso do Laravel 5.2, você precisará usar o url ('/')

aqui está a lista de todas as outras funções auxiliares do Laravel

Akshay Khale
fonte
@sambellerose e é você deseja acessar pastas internas / arquivos que você pode fazerurl('/css/style.css')
Akshay Khale
13

Este:

echo url('/');

E isto:

echo asset('/');

ambos exibiram o URL inicial no meu caso :)

GGadash
fonte
3

Outra possibilidade: {{ URL::route('index') }}

CptChaos
fonte
Não sabe por que isso foi prejudicado, pois realmente funciona e ninguém deu a opção também?
CptChaos
2
Não é meu voto negativo, mas acho que o motivo é que você não pode garantir que o nome da sua rota raiz seja "índice" em todos os aplicativos.
Jonathan
3

Você também pode usar URL :: to ('/') para exibir a imagem no Laravel. Por favor veja abaixo:

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

Suponha que sua imagem seja armazenada em "public / images".

Niladri Banerjee - Uttarpara
fonte
3

Para obter apenas o URL do aplicativo que você configurou, você pode usar:

Config::get('app.url')
Kenyon
fonte
Essa definição é usada apenas no Laravel CLI. app.urlparece ser um retorno
Wallace Maxters
1
Bem, mais, env ('APP_URL') provavelmente seria a melhor opção.
21416 Kenyon
2

Eu usei isso e funcionou para mim no Laravel 5.3.18:

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

NOTA IMPORTANTE: Isso funcionará apenas quando você já tiver removido "público" do seu URL. Para fazer isso, você pode conferir este tutorial útil .

ITWitch
fonte
2

A propósito, se o seu percurso tiver um nome como:

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

Você pode usar a route()função assim:

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

Outras funções úteis:

$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

闫 鹏程
fonte
2

Verifique isto -

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

Isso está funcionando para mim e espero que funcione para você.

msayubi76
fonte
1

Você pode usar fachadas ou funções auxiliares conforme a seguir.

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

Laravel usando o Symfony Component for Request, lógica interna do Laravel conforme a seguir.

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
fonte
0

Encontrei uma outra maneira de obter apenas o URL base para exibir o valor da variável de ambiente APP_URL

env('APP_URL')

que exibirá o URL base como http: // domains_your // your_website . cuidado, assume que você configurou a variável de ambiente no arquivo .env (presente na pasta raiz).

Adeel Raza Azeemi
fonte
0

você pode obtê-lo em Request, no laravel 5

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

Eu também usei base_path () fuction e funcionou

Minh Anh Vương
fonte