具有子域的Laravel资产

时间:2018-11-01 12:41:03

标签: laravel

我需要在不编写子域名的情况下使asset()工作:

我的代码:

asset('images/logos/logo-partner-5.png')

有效但不想要的代码:

asset('subdomain/images/logos/logo-partner-5.png')

有什么建议吗?

也许不使用 asset()而是其他功能?存在另一种方式?

还是如何配置 asset()路径?

1 个答案:

答案 0 :(得分:1)

编辑:

Laravel 5.7.14将附带一个asset_url配置选项来实现此目的。

以下原始答复:


您可以定义自己的帮助函数:

function cdn_asset($path, $secure = null) {
    return app('url')->assetFrom(config('app.cdn_subdomain'), $path, $secure);
}

并将配置值放在config/app.php中:

'cdn_subdomain' => 'http://subdomain.example.com',

用法:

<img src="{{ cdn_asset('images/logos/logo-partner-5.png') }}">

我将函数命名为cdn_asset()是因为这似乎是服务不同域中资产的最常见情况,但是您可以随心所欲地调用它。


如果您总是 希望从子域提供 所有 资产,则可以覆盖Laravel的资产助手。这可能会有点脏:

如果您查看Illuminate\Foundation\helpers.php,您会看到Laravel在创建函数之前先检查该函数是否存在:

if (! function_exists('asset')) {
    function asset() { ... }
}

这意味着您可以在Laravel之前定义函数,而它将使用您的函数:

function asset($path, $secure = null) {
    return app('url')->assetFrom('http://subdomain.example.com', $path, $secure);
}

如果您创建一个名为/app/helpers.php的文件来定义此功能,则需要 之前要求它。Laravel加载/vendor/autoload.php文件。从Laravel 5.7开始,这种情况发生在/public/index.php中。在此之前添加您自己的行:

require __DIR__.'/../app/helpers.php'; // this is yours
require __DIR__.'/../vendor/autoload.php';

您可能还希望在项目基本路径的artisan文件中要求它。