Laravel组件构造函数仅在本地环境中有效。

3

我的组件长这个样子:


namespace App\View\Components;

use Illuminate\View\Component;
use App\Http\Controllers;
use Illuminate\Http\Request;

class shopImageContainer extends Component
{
    public $image;
   
    public $ph;
    public $va;

    
    public $config;
    
    /**
     * Create a new component instance.
     *@param string $ph
     *@param string $va
     * @return void
     */
    public function __construct($ph, $va, $image)
    {
        $this->image = $image;
        $this->va = $va;
        $this->ph = $ph;
        $this->config = Controllers\GlobalFunctions::getConfig($ph, $va);
    }

    /**
     * Get the view / contents that represent the component.
     *
     * @return \Illuminate\Contracts\View\View|string
     */
    public function render()
    {       
        return view('components.shop-image-container');
    }
}

在我的component.blade中,我有这行/块代码,它会抛出"Undefined variable: config"错误:

@if($config->dd)
    <div class="col bg-dark text-center p-3">
        <a  class="btn btn-primary rounded-0 " href="/download/{{ basename($image) }}" role="button">Download in {{ $config->ddLongEdge }}px</a>            
    </div>
@endif

看起来构造方法没有被调用(我在方法中尝试使用dd("test"),但是没有输出)。有趣的是,在我的本地环境中它可以工作,但是在服务器上(apache2)无法工作。我在某个地方读到说可能会存在组件的错误,并且服务器的配置可能出了问题,但是在这两种情况下都没有进一步的解决方法。感谢任何帮助。

2个回答

1
我花了一整天的时间来寻找解决这个问题的方法。我的开发环境是Mac,但我的服务器是Ubuntu环境。
看起来你的文件名和类名应该遵循 PSR-4自动加载标准。
在这里,你的控制器文件名和控制器名称应该采用PascalCase,并且区分大小写。
如果不遵循PSR-4标准,你的文件将无法自动加载,这会触发此错误。因为在生成视图时构造方法没有被调用。
我通过将所有控制器及其名称重命名为PascalCase并遵循PSR-4标准来解决了这个问题。
这显然解决了我的问题。
你可以运行 composer update 可能还有另一个命令,但这将更新你的包并给出不遵循PSR-4标准的文件的警告。
通过修复这些文件名和他们的控制器名称,这些警告将显示为PSR-4标准,应该解决你的问题。

1
我遇到了同样的问题,我发现解决方法是: (实际上是遵循PSR-4标准)
在命名组件类时,将其第一个字母改为大写,就像在我的情况下,我将其命名为:

App\view\component

请注意,组件类名也必须大写,以便与文件名匹配。

class name inside component file

当你调用一个组件时,你可以选择使用大写或小写,根据我的经验,调用时大小写并不重要: <x-Header title="home" /><x-header title="home" /> 的效果相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接