Laravel 8引入模板使用{{ asset }}报preg_match参数类型错误如何解决?
问题排查方案
- 第一步:检查
asset()辅助函数的传参格式
Laravel 原生asset()函数要求必须传入字符串类型的静态资源相对路径,正确写法示例:
<link rel="stylesheet" href="{{ asset('template/css/main.css') }}">
如果出现以下错误写法会触发参数类型报错:
直接写
{{ asset }}不带任何参数传入数组作为参数,例如
{{ asset(['path/to/css.css']) }}传入的配置项返回值为数组,例如
{{ asset(config('custom.asset_path')) }},需要确认对应配置项返回值为字符串第二步:核对文件系统配置
打开config/filesystems.php,检查disks.public.url配置项是否为字符串格式,正常配置示例:
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
如果该配置被误改为数组格式,会导致asset()生成路径时读取到数组值触发报错。
- 第三步:排查是否存在自定义函数覆盖
如果项目中自行定义了同名asset()辅助函数(通常在app/Helpers.php等全局加载文件中),需要确认该自定义函数的入参要求、返回值类型是否符合预期,也可以在tinker中执行以下命令验证函数来源:
php artisan tinker # 执行后输入 reflectionFunction('asset')->getFileName();
原生函数返回路径应为vendor/laravel/framework/src/Illuminate/Foundation/helpers.php,如果返回其他路径则说明存在覆盖。
- 第四步:检查模板标签其他属性
确认link标签的所有属性中,是否有其他Blade输出语句返回了数组,连带导致路径解析异常。
内容的提问来源于stack exchange,提问作者seacucumber
相关产品推荐
相关产品推荐

