Laravel:获取基本网址


182

简单的问题,但答案似乎很难获得。在Codeigniter中,我可以加载url帮助器,然后简单地执行

echo base_url();

获取我网站的网址。Laravel是否有同等功能?

Answers:


282

您可以使用URL门面,它使您可以调用URL生成器

因此,您可以执行以下操作:

URL::to('/');

您还可以使用应用程序容器:

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

或注入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
尽管示例中可能显示它,但它相对于Laravel的根路径,因此,如果安装在/something/其中,它将提供正确的URL。
ceejayoz 2014年

@deFreitas和#ceejayoz如何在laravel本地化中使用URL :: to?
Mubashar Iqbal '18

1
@MubasharIqbal如果我理解您的问题,请{{URL::to('/my-page.html')}}查看并查看echo URL::to('/my-page.html');代码
deFreitas

在我的情况下<a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">,很好的处理程序: ,谢谢!
joelmez4 '18

156

Laravel <5.2

echo url();

Laravel> = 5.2

echo url('/');

希望这对您有帮助


4
您能否将这个答案扩展为包括一个解释而不只是一个代码片段?

2
考试:我在本地站点:localhost / abc中有站点在Codeigniter中:echo base_url(); =>我在Laravel中获得localhost / abc:echo url(); =>我也获得了localhost / abc
阮成BOI

1
将此网址用于带有分段的网址:url()。'/'。\ Request :: segment(1)。'/'。\ Request :: segment(2)
0x1ad2

20
请注意,这在5.2中不再起作用:github.com/laravel/framework/issues/11479url('/')不过,您可以使用
4lun

1
asset('/')对我来说似乎更好,因为它在基本href中具有结尾的斜杠。
vintproykt

47

对于Laravel 5,我通常使用:

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

我的理解是,使用url()函数调用是相同FacadeURL::to()


4
注意:如果您的网站是通过https服务的,则可以secure_url()按相同方式使用此功能,这将产生一个https链接。url()在https站点上使用仍将产生http链接。
DrewT '16

1
这个为我工作。知道secure_url()语法也很有用。谢谢。
jimmyplaysdrums

1
我正在使用Lumen 5.4。会url()根据请求的协议生成一个http或https链接。另一方面secure_url()不存在。Laravel 5.4中也有这种变化吗?
Andreas Linnert

不,它是Larvel 5.4的一部分。我真的无法发表评论,因为我从未使用过Lumen,但secure_url()可以在此处找到5.4 Laravel文档:laravel.com/docs/5.4/helpers#method-secure-url
DrewT

23

自2018年Laravel版本(5.7)文档以来的更新,其中包含更多的url()函数及其用法。

问题:要在Laravel中获取站点的URL?

这是一个普遍的问题,因此我们可以将其拆分。

1.访问基本URL

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

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

2.访问当前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.命名路由的URL

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

4.资产网址(公开)

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

5.文件网址

use Illuminate\Support\Facades\Storage;

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

还可以通过URL外观访问以下每种方法:

use Illuminate\Support\Facades\URL;

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

如何从刀片模板(视图)中调用这些帮助程序功能。

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

为了使其能够与非精美网址配合使用,我必须要做的是:

asset('/');

3
对我而言,这是最好的选择<base href="{{ asset('/') }}" />
rneves 2015年

恭喜您!<base href="..."/>由于正斜杠,它正好适合
vintproykt '19

13

Laravel提供了许多辅助功能,您可以根据需要简单地

使用Laravel Helpers的url()函数

但是对于Laravel 5.2,您将不得不使用url('/')

是Laravel其他所有辅助功能的列表


@sambellerose,您是否要访问可以执行的内部文件夹/文件url('/css/style.css')
Akshay Khale,2016年

13

这个:

echo url('/');

还有这个:

echo asset('/');

在我的情况下都显示了主页URL :)


3

另一种可能性: {{ URL::route('index') }}


不确定为什么会降低投票率,因为它实际上有效并且没有人也提供该选项?
CptChaos

2
不是我的不赞成,但我猜测原因是您不能保证您的根路由的命名在每个应用程序中都是“索引”。
乔纳森

3

您还可以使用URL :: to('/')在Laravel中显示图像。请看下面:

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

假设您的图像存储在“ public / images”下。


3

要获取您配置的应用程序网址,可以使用:

Config::get('app.url')

此定义仅在Laravel CLI中使用。app.url它似乎是一个后备广告
Wallace Maxters

1
好了,env('APP_URL')可能是最好的选择。
Kenyon

2

我使用了它,它在Laravel 5.3.18中对我有用:

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

重要说明:仅当您已经从URL中删除了“ public”时,此方法才有效。为此,您可以查看此有用的教程


2

顺便说一句,如果您的路线名称如下:

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

您可以使用如下route()功能:

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

其他有用的功能:

$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

检查一下-

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

这对我有用,我希望对您有用。


1

您可以按照以下方式使用立面或辅助功能。

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

Laravel使用Symfony组件进行请求,Laravel内部逻辑如下。

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

您可以从laravel 5的Request中获取

request()->getSchemeAndHttpHost();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.