Tea*_*abx 5 php laravel laravel-blade
我在 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');
}
}
Run Code Online (Sandbox Code Playgroud)
并尝试在视图中访问它,如下所示:
<div>
<p> {{$test}} </p>
</div>
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这不起作用,我不明白为什么。它只是说这$test
是未定义的。也许我应该指出,我是 Laravel 的初学者,所以如果我犯了一些明显的错误,请原谅。这看起来很奇怪,这不适用于一个空白项目。
先感谢您。
事实上,所有的答案都是误导性的。该$test
属性已经是公共的,因此可供模板使用。请不要手动向视图添加参数。
我刚刚遇到了类似的问题,虽然我可以肯定地说它与组件类名有关,但我无法追踪它,因为它又神奇地开始工作了。
对此我能说的是:
我有一个具有相同基类名但不同命名空间的类,删除了非组件类,然后突然该组件被呈现为匿名组件,完全绕过组件类。(您可以通过在组件类构造函数中放置 dd() 来轻松验证这一点。)
我的第一个想法是自动加载器需要刷新,但composer dump
没有改变任何东西。
将组件类和模板重命名为其他名称解决了该问题。
当我想追踪错误时,我将类和模板重命名回原来的名称,但现在它突然起作用了......
我的猜测是视图缓存导致了问题。<x-component-name ... />
从我更改包含该组件的模板中的x-blade ( ) 的那一刻起,它就起作用了。因此,这个问题似乎神奇地消失了,因为缓存的视图由于模板更改而被替换。
因此,基于此,解决问题的最佳选择是:
public
,它们将在您的模板中不可用。protected
private
php artisan view:clear
)。composer dump
)。dd()
您的构造函数中。如果您仍然从模板中收到错误,则 Blade 正在绕过您的类并尝试将您的模板用作匿名组件。希望对遇到这个令人困惑的问题的人有所帮助。
归档时间: |
|
查看次数: |
4548 次 |
最近记录: |