删除 blade 组件类文件后需同步清除视图缓存与 composer 自动加载映射,否则仍会因残留引用导致“failed to open stream”错误。
在 Laravel 中,匿名组件(Anonymous Component) 的核心特征是:仅存在 Blade 视图文件(如 resources/views/components/icons/plus.blade.php),而不定义对应的 PHP 类(如 app/View/Components/Icons/Plus.php)。当你手动删除组件类文件却未清理相关缓存时,Laravel 仍可能尝试通过已编译的视图模板或自动加载机制去加载该已不存在的类,从而抛出类似以下错误:
ErrorException include(\path\vendor\composer/../../app/View/Components/Icons/Plus.php): Failed to open stream: No such file or directory
这并非 Laravel 的 Bug,而是其底层机制所致:
✅ 正确迁移步骤如下(缺一不可):
删除组件类文件
确保 app/View/Components/Icons/Plus.php(及对应命名空间下所有相关类)已彻底移除。
确保视图文件存在且路径正确
匿名组件的 Blade 视图必须位于 resources/views/components/icons/plus.blade.php(注意目录结构与小写命名约定),内容示例如下:
清除 Blade 视图缓存
php artisan view:clear
此命令删除 storage/framework/views/ 下所有已编译视图,强制下次请求重新解析模板。
刷新 Composer 自动加载映射
composer dump-autoload
该命令重建 vendor/composer/autoload_classmap.php,移除对已删除类的路径索引,避免运行时错误加载。
⚠️ 注意事项:
完成以上四步后,再次访问页面,