Mic*_*msø 4 php laravel laravel-forge laravel-blade
NoteTag我在app/View/Components/Notes中有一个组件,在resources/views/components/notes中有一个 Blade 组件。
我在父组件中使用此组件,如下所示:
<x-notes.note-tag :name="$tag->name"></x-notes.note-tag>
Run Code Online (Sandbox Code Playgroud)
NoteTag有一个我想在视图中使用的方法:
public function typeColor()
{
return substr(md5($this->name), 0, 6);
}
Run Code Online (Sandbox Code Playgroud)
我在视图中引用该方法,如下所示:
<span style="border: 2px #{{ $typeColor() }} solid" class="rounded-lg mr-2 px-1 bg-gray-200 text-gray-600 shadow">
{{ $name }}
</span>
Run Code Online (Sandbox Code Playgroud)
这在本地开发中效果很好,但在生产中我得到了这个:
[previous exception] [object] (ErrorException(code: 0): Undefined variable $typeColor at /home/forge/loggbok.michaelsimsoe.no/storage/framework/views/e354b32f864ce675974b798281d94fe7f4dd2831.php:1)
[stacktrace]
Run Code Online (Sandbox Code Playgroud)
我还尝试将其作为数据传递给视图:
[previous exception] [object] (ErrorException(code: 0): Undefined variable $typeColor at /home/forge/loggbok.michaelsimsoe.no/storage/framework/views/e354b32f864ce675974b798281d94fe7f4dd2831.php:1)
[stacktrace]
Run Code Online (Sandbox Code Playgroud)
这会导致相同的错误。所以我猜想生产中存在一些映射问题,组件视图无法找到类。
根据https://github.com/laravel/framework/issues/31919和Laravel 文档:手动注册组件我已经在以下位置尝试过AppServiceProvider:
public function render()
{
return view('components.notes.note-tag', ['color' => $this->typeColor()]);
}
Run Code Online (Sandbox Code Playgroud)
没有运气。
我看到多次提到这个问题:
有些人提到类名的大小写是一个问题。有些提到了组件的手动注册。他们都不适合我。
我正在使用 Forge 在 DigitalOcean 上托管该应用程序。
我正在使用最新版本的 Laravel 和 PHP 8。
有任何想法吗?
将我的评论转换为答案,因为谁不喜欢声誉?!;)
首先,您是否删除了storage/framework/views生产服务器上的所有文件?
我敢打赌问题只是缓存问题,因此php artisan view:clear或手动删除该文件夹中的文件几乎肯定会解决这个问题(著名的最后一句话)!
除此之外,是否有app/Views/Components/Notes/NoteTag.php一个类名noteTag(带有小写n)的原因?
尝试更改它以查看是否可以解决问题。
Laravel 的命名方案非常特殊。
所有文件名必须与其名称空间和类名完美匹配,包括大小写。视图的情况并非如此,它们可以位于任何地方,因为它们是在渲染方法中使用相对路径调用的。
| 归档时间: |
|
| 查看次数: |
3257 次 |
| 最近记录: |