我在 Laravel 中遇到了这个非常奇怪的问题。
我遇到一个问题,我的组件视图之一无法读取其类中定义的变量。
这有点奇怪,因为我的项目中运行了几个组件,除了这个之外,它们都工作正常。
所以我创建了一个新的 Laravel 项目来测试一些东西(想检查问题是否出在我这边,也许我以某种方式弄乱了项目文件)。
我使用在空白项目上创建了一个新组件php artisan make:component Test
然后我简单地将一个测试变量添加到类组件中,如下所示:
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class Test extends Component
{
public $test;
/**
* Create a new component instance.
*
* @return void
*/
public function __construct()
{
$this->test = "testing";
}
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\View\View|string
*/
public function render()
{
return view('components.test');
}
}
并尝试在视图中访问它,如下所示:
<div>
<p> {{$test}} </p>
</div>
由于某种原因,这不起作用,我不明白为什么。它只是说$test
未定义。
也许我应该指出,我是 Laravel 的初学者,所以如果我犯了一些明显的错误,请原谅。这看起来很奇怪,这不适用于一个空白项目。
先感谢您。
事实上,所有的答案都是误导性的。这$test
属性已经是公共的,因此可用于模板。请不要手动向视图添加参数。
我刚刚遇到了类似的问题,虽然我可以肯定地说它与组件类名有关,但我无法追踪它,因为它又神奇地开始工作了。
对此我能说的是:
-
我有一个具有相同基类名但不同命名空间的类,删除了非组件类,然后突然该组件被呈现为匿名组件,完全绕过组件类。 (您可以通过在组件类构造函数中放置 dd() 来轻松验证这一点。)
-
我的第一个想法是自动加载器需要刷新,但是composer dump
没有改变任何东西。
-
将组件类和模板重命名为其他名称解决了该问题。
-
当我想追踪错误时,我将类和模板重命名回原来的名称,但现在它突然起作用了......
-
我的猜测是视图缓存导致了问题。从我更换 x 刀片的那一刻起它就起作用了(<x-component-name ... />
)在包含该组件的模板中。因此,这个问题似乎神奇地消失了,因为缓存的视图由于模板更改而被替换。
因此,基于此,解决问题的最佳选择是:
- 验证您的属性是
public
,如果它们是,它们将不会在您的模板中可用protected
or private
.
- 清除缓存,尤其是。视图缓存(
php artisan view:clear
).
- 转储自动加载机 (
composer dump
).
- 验证您的类是否确实被使用。放一个
dd()
在你的构造函数中。如果您仍然从模板中收到错误,则 Blade 正在绕过您的类并尝试将您的模板用作匿名组件。
- 将组件重命名为其他名称以查看类名是否冲突。
希望对遇到这个令人困惑的问题的人有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)