我的Laravel应用程序是从子目录运行的,所以为了能够使用这样的URL帮助:{{ url('users') }}
而不是像{{ url('subdirectory/users') }}
那样我使用forceRouteUrl()
方法在我的AppServiceProvider.php文件中。它看起来像这样:
public function boot()
{
URL::forceRootUrl(Config::get('app.url'));
...
我的.env:APP_URL=http://app.dev/subdirectory
到目前为止一直很好,除了返回路线。例如,我有一个排序方法,它执行此操作:
function sort_schedule($column, $order)
{
return route('schedule', [
'sortBy' => $column,
'sortOrder' => $order,
]
);
}
但它生成的链接是:http://app.dev/subdirectory/subdirectory/...
当我使用Kyslik's Column Sortable包时会发生同样的事情。
我该如何解决这个问题?
答案 0 :(得分:2)
似乎虽然url()或asset()之类的其他帮助程序没有这个问题,但是当laravel不能直接从站点根目录访问时,route()帮助程序会复制子路径。使用forceRootUrl()。 我使用的是laravel 5.4,但这个问题也出现在以前的版本中。
为解决这个问题,我找到了三种可能的解决方案:
我选择了第三个选项并创建了一个CustomHelper.php文件,其中包含我的新route()帮助器。 以下是有关如何覆盖默认助手的说明: https://laracasts.com/discuss/channels/general-discussion/override-functions-in-supporthelpersphp
在我的CustomHelper.php文件中,我添加了这个
function route($name, $parameters = [], $absolute = true)
{
$appUrl = config('app.url'); // in your case: http://app.dev
$appUrlSuffix = config('app.url_suffix'); // in your case: subdirectory
// Additional check, do the workaround only when a suffix is present and only when urls are absolute
if ($appUrlSuffix && $absolute) {
// Add the relative path to the app root url
$relativePath = app('url')->route($name, $parameters, false);
$url = $appUrl.$relativePath;
} else {
// This is the default behavior of route() you can find in laravel\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
$url = app('url')->route($name, $parameters, $absolute);
}
return $url;
}
app.url_suffix是我在config / app.php
中定义的自定义变量'url_suffix' => env('APP_URL_SUFFIX', null),
和.env配置文件
APP_URL_SUFFIX=subdirectory