Laravel: Nhận url cơ sở


182

Câu hỏi đơn giản, nhưng câu trả lời có vẻ khá khó để đi qua. Trong Codeigniter, tôi có thể tải trình trợ giúp url và sau đó chỉ cần làm

echo base_url();

để lấy URL của trang web của tôi. Có một tương đương trong Laravel?

Câu trả lời:


282

Bạn có thể sử dụng mặt tiền URL cho phép bạn thực hiện cuộc gọi đến trình tạo URL

Vì vậy, bạn có thể làm:

URL::to('/');

Bạn cũng có thể sử dụng bộ chứa ứng dụng:

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

Hoặc tiêm 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
Và mặc dù có thể xuất hiện từ ví dụ, điều này có liên quan đến đường dẫn gốc của Laravel, vì vậy nếu bạn được cài đặt trong /something/đó sẽ tạo đúng URL.
ceejayoz

@deFreitas và #ceejayoz làm thế nào để sử dụng URL :: để bản địa hóa laravel?
Mubashar Iqbal

1
@MubasharIqbal Nếu tôi hiểu câu hỏi của bạn, {{URL::to('/my-page.html')}}tại chế độ xem và echo URL::to('/my-page.html');
deFreitas

xử lý tốt, trong trường hợp của tôi: <a class="button is-primary" href="<?= URL::to('/'); ?>/atencion/reporte" target="_blank">cảm ơn!
joelmez4

156

Ấu trùng <5.2

echo url();

Ấu trùng> = 5,2

echo url('/');

Hy vọng điều này sẽ giúp bạn


4
Bạn có thể mở rộng câu trả lời này để bao gồm một lời giải thích thay vì chỉ một đoạn mã không?

2
Bài kiểm tra: Tôi có trang web trong local: localhost / abc Trong Codeigniter: echo base_url (); => Tôi nhận localhost / abc Trong Laravel: echo url (); => Tôi cũng nhận được localhost / abc .
Nguyễn Thành Bồi

1
Sử dụng mã này cho một url có phân đoạn: url (). '/'. \ Request :: phân đoạn (1). '/'. \ Request :: phân đoạn (2)
0x1ad2

20
Lưu ý rằng điều này không còn hoạt động trong 5.2: github.com/laravel/framework/issues/11479 Bạn có thể sử dụng url('/')thay vì tuy nhiên
4lun

1
asset('/')có vẻ tốt hơn đối với tôi bởi vì nó có dấu gạch chéo cần thiết trong cơ sở.
vintproykt

47

Đối với Laravel 5 tôi thường sử dụng:

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

Tôi hiểu rằng việc sử dụng url()hàm đang gọi giống FacadenhưURL::to()


4
Lưu ý: nếu trang web của bạn được phục vụ qua https, bạn có thể sử dụng secure_url()chức năng theo cách tương tự và điều này sẽ tạo ra một liên kết https. Sử dụng url()trên một trang web https vẫn sẽ tạo ra một liên kết http.
DrewT

1
Cái này làm việc cho tôi Cũng hữu ích để biết cú pháp safe_url (). Cảm ơn.
jimmyplaysdrums

1
Tôi đang sử dụng Lumen 5.4. Ở đó url()tạo ra một liên kết http hoặc https dựa trên giao thức của yêu cầu. Mặt khác secure_url()không tồn tại. Có phải điều này cũng thay đổi trong Laravel 5.4?
Andreas Linnert

Không, đó là một phần của Larvel 5.4. Tôi thực sự không thể nhận xét vì tôi chưa bao giờ sử dụng Lumen nhưng tài liệu về Laravel 5.4 secure_url()có sẵn ở đây: laravel.com/docs/5.4/helpers#method-secure-url
DrewT

23

Cập nhật từ tài liệu phát hành Laravel (5.7) 2018 với một số chức năng url () khác và đó là cách sử dụng.

Câu hỏi: Để lấy URL của trang web trong Laravel?

Đây là một loại câu hỏi chung, vì vậy chúng tôi có thể chia nó.

1. Truy cập URL cơ sở

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

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

2. Truy cập URL hiện tại

// 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 cho các tuyến được đặt tên

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

4. URL tới tài sản (công khai)

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

5. URL tệp

use Illuminate\Support\Facades\Storage;

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

Mỗi phương thức này cũng có thể được truy cập thông qua mặt tiền URL:

use Illuminate\Support\Facades\URL;

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

Cách gọi các hàm Helper này từ Mẫu lưỡi cắt (Lượt xem) với cách sử dụng.

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

Để làm cho nó hoạt động với các URL không đẹp, tôi phải làm:

asset('/');

3
Theo nhu cầu của tôi, đây là điều tốt nhất<base href="{{ asset('/') }}" />
rneves

Thanh danh cho bạn! Nó vừa vặn <base href="..."/>vì dấu gạch chéo
vintproykt

13

Laravel cung cấp một loạt các hàm trợ giúp và theo yêu cầu của bạn, bạn có thể chỉ cần

sử dụng chức năng url () của Trình trợ giúp Laravel

nhưng trong trường hợp của Laravel 5.2, bạn sẽ phải sử dụng url ('/')

đây là danh sách tất cả các chức năng trợ giúp khác của Laravel


@sambellerose và bạn muốn truy cập các thư mục / tệp bên trong mà bạn có thể làmurl('/css/style.css')
Akshay Khale

13

Điều này:

echo url('/');

Và điều này:

echo asset('/');

cả hai đều hiển thị url nhà trong trường hợp của tôi :)


3

Khả năng khác: {{ URL::route('index') }}


Không chắc chắn lý do tại sao điều này đã bị hạ cấp, vì nó thực sự hoạt động và không ai đưa ra tùy chọn là tốt?
CptChaos

2
Không phải downvote của tôi nhưng tôi đoán lý do là bạn không thể đảm bảo việc đặt tên cho tuyến gốc của bạn là "chỉ mục" trong mọi ứng dụng.
Jonathan

3

Bạn cũng có thể sử dụng URL :: to ('/') để hiển thị hình ảnh trong Laravel. Vui lòng xem bên dưới:

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

Giả sử rằng, hình ảnh của bạn được lưu trữ trong "công khai / hình ảnh".


3

Để chỉ nhận url ứng dụng, bạn đã định cấu hình, bạn có thể sử dụng:

Config::get('app.url')

Định nghĩa này chỉ được sử dụng trong Laravel cli. app.urlnó dường như là một dự phòng
Wallace Maxters

1
Chà nữa, env ('APP_URL') có lẽ sẽ là lựa chọn tốt nhất.
Kenyon

2

Tôi đã sử dụng cái này và nó hoạt động với tôi trong Laravel 5.3.18:

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

LƯU Ý QUAN TRỌNG: Điều này sẽ chỉ hoạt động khi bạn đã xóa "công khai" khỏi URL của mình. Để làm điều này, bạn có thể xem hướng dẫn hữu ích này .


2

Nhân tiện, nếu tuyến đường của bạn có một tên như:

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

Bạn có thể sử dụng route()chức năng như thế này:

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

Các chức năng hữu ích khác:

$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

Kiểm tra điều này -

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

Điều này đang làm việc cho tôi và tôi hy vọng nó sẽ làm việc cho bạn.


1

Bạn có thể sử dụng mặt tiền hoặc chức năng trợ giúp theo sau.

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

Laravel sử dụng Thành phần Symfony cho Yêu cầu, logic bên trong của Laravel theo sau.

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

Tôi đã tìm thấy một cách khác để chỉ cần lấy url cơ sở để hiển thị giá trị của biến môi trường APP_URL

env('APP_URL')

sẽ hiển thị url cơ sở như http: // domain_your // của bạn_website . hãy cẩn thận, nó giả sử rằng bạn đã đặt biến môi trường trong tệp .env (có trong thư mục gốc).


0

bạn có thể lấy nó từ Yêu cầu, tại laravel 5

request()->getSchemeAndHttpHost();

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.