我需要在不编写子域名的情况下使asset()工作:
我的代码:
asset('images/logos/logo-partner-5.png')
有效但不想要的代码:
asset('subdomain/images/logos/logo-partner-5.png')
有什么建议吗?
也许不使用 asset()而是其他功能?存在另一种方式?
还是如何配置 asset()路径?
答案 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
文件中要求它。