Laravel 5.2-如何在现有的url()辅助函数中添加前缀?

时间:2016-05-10 12:02:37

标签: laravel url laravel-5 localization laravel-5.2

我在我的网络应用程序中使用本地化功能。但我想将App::getLocale()添加到url()。例如,在我添加<a href="{{url('/admin')}}">link</a>的视图中,我想将HTML中的网址显示为http://localhost/mysite/en/admin。我该怎么办?

我可以自定义内置URL辅助函数吗?

4 个答案:

答案 0 :(得分:1)

url()方法不允许这样做,因为它会为您提供的第一个参数的确切值生成网址。但是,如果您切换到 route()方法并为路线定义了前缀,则可以实现所需。

// define a route group with a prefix in routes.php
Route::group(['prefix' => App::getLocale()], function() {
  Route::get('admin', ['as' => 'admin', 'uses' => 'AdminController@action']);
});

// generate prefixed URL
echo route('admin');

如果您的语言区域为 en ,则上述行应为您提供 / en / admin

等网址

答案 1 :(得分:1)

在Laravel 5.4中,使用以下

{{ url('Your_Prefix', 'login') }}

url只是将整个路径格式化为所请求的地址,您可以在其中添加任何内容。

答案 2 :(得分:0)

我知道这是一个老问题,但是今天我遇到了同样的问题。根据其他答案,我想出了以下解决方案:我创建了一个使用Laravel url() helper函数的helper类,但是在调用helper函数之前对$path变量进行了预处理。我为url()secure_url()辅助函数创建了自己的实现。

这是我在应用程序中实现了本地化之后的一项后续操作,为此我咨询了this question

看看我的解决方案。我希望有一天对某人有用:

<?php

namespace App\Http\Helpers;

class Helpers {

    /**
     * Generate a url for the application.
     *
     * @param  string  $path
     * @param  mixed   $parameters
     * @param  bool    $secure
     * @return \Illuminate\Contracts\Routing\UrlGenerator|string
     */
    public static function url($path = null, $parameters = [], $secure = null) {
        $path = (string) $path;
        if (strlen($path) > 0 && $path[0] !== '/') {
            $path = '/' . $path;
        }
        return url(app()->getLocale() . $path, $parameters, $secure);
    }

    /**
     * Generate a HTTPS url for the application.
     *
     * @param  string  $path
     * @param  mixed   $parameters
     * @return string
     */
    public static function secure_url($path, $parameters = []) {
        return static::url($path, $parameters, true);
    }

}

答案 3 :(得分:-3)

enter image description here我找到了解决方案。在laravel 5.3中测试过。有效!可能对其他人有用。 所以值得分享:

输入vendor\laravel\framework\src\Illuminate\Foundation\helpers.php并修改代码:

只需在your prefix变量

之前添加$path即可