【发布时间】:2021-08-03 13:45:39
【问题描述】:
我在 app/View/Components/Notes 中有一个组件 NoteTag,在 resources/views/components/notes 中有一个刀片组件。
我在这样的父组件中使用这个组件:
<x-notes.note-tag :name="$tag->name"></x-notes.note-tag>
NoteTag 有一个我想在视图中使用的方法:
public function typeColor()
{
return substr(md5($this->name), 0, 6);
}
我在视图中这样引用方法:
<span style="border: 2px #{{ $typeColor() }} solid" class="rounded-lg mr-2 px-1 bg-gray-200 text-gray-600 shadow">
{{ $name }}
</span>
这在本地开发中效果很好,但在生产中我得到了这个:
[previous exception] [object] (ErrorException(code: 0): Undefined variable $typeColor at /home/forge/loggbok.michaelsimsoe.no/storage/framework/views/e354b32f864ce675974b798281d94fe7f4dd2831.php:1)
[stacktrace]
我也尝试将其作为数据传递给视图:
public function render()
{
return view('components.notes.note-tag', ['color' => $this->typeColor()]);
}
这会导致相同的错误。所以我猜在生产中存在一些映射问题,组件视图无法找到类。
根据https://github.com/laravel/framework/issues/31919 和Laravel docs: Manually Registering Components 我已经在AppServiceProvider 中尝试过:
use App\View\Components\Notes\NoteTag;
use Illuminate\Support\Facades\Blade;
...
class AppServiceProvider extends ServiceProvider
{
...
public function boot()
{
Blade::component('note-tag', NoteTag::class);
}
...
没有运气。
我看到多次提到这个问题:
- SO: laravel 7 blade component public methods not working
- SO: Laravel Components not getting my methods in shared host
- Laracasts.com: laravel 7 blade component public methods not working
有些人提到类名的大小写是一个问题。有人提到手动注册组件。它们都不适合我。
我正在使用 Forge 在 DigitalOcean 上托管应用程序。
我使用的是最新版本的 Laravel 和 PHP 8。
有什么想法吗?
【问题讨论】:
-
首先,您是否删除了
storage/framework/views中的所有文件?那么app/Views/Components/Notes/NoteTag.php的类名是noteTag是不是有原因呢?我敢打赌这个问题只是一个缓存问题,所以php artisan view:clear或手动删除该文件夹中的文件几乎肯定会解决这个问题(著名的遗言;))。 -
@JustCarty 我没有。视图是否:清晰,它什么也没做。但!我已在本地将
noteTag文件名更改为NoteTag。显然,该更改尚未提交给 git(为什么 git 不将大写更改视为更改?)。我删除了文件,创建了一个新文件并推送它,现在它可以工作了。所有这一切都是为了缺少大写 N。谢谢!如果您将评论重新表述为答案,我会接受。
标签: php laravel laravel-blade laravel-forge