【问题标题】:Laravel "Unable to locate a class or view for component" in production environmentLaravel在生产环境中“无法找到组件的类或视图”
【发布时间】:2021-03-16 08:03:24
【问题描述】:

我在本地的 Mac 上开发。最新版本的 Big Sur。

今天我通过 Forge 通过 Ubuntu 服务器将我的应用程序部署到生产环境,遇到了一个我以前从未见过的错误,并且无法在线找到答案。我可以看到很多人在抱怨它,但是任何人在其他答案上所说的都是链接到没有解决方案甚至没有真正解释的问题,所以这就是我问一个新问题的原因。

确切的错误是这样的; Unable to locate a class or view for component [layouts.base]. (View: /home/forge/default/releases/20201204084441/resources/views/layouts/app.blade.php)

在我的应用中,我有; app\View\Components\Layouts\App.php 看起来像这样;

<?php

namespace App\View\Components\Layouts;

use Illuminate\View\Component;

class App extends Component
{
    public function render()
    {
        return view('layouts.app');
    }
}

那我也有; resources\views\layouts\app.blade.php

<x-layouts.base>
<!-- contents -->
</x-layouts.base>

(base 也差不多)

在 Mac 上完美运行。一旦我在 Ubuntu 上部署它,我就会收到上面的错误,即“无法找到具有这些名称的类或视图”。

有人可以指导我如何解决这个问题,因为到目前为止我完全不知道,尽管知道区分大小写可能是其他问题的问题,但我找不到任何实际的解决方案或解决这个问题的方法。

【问题讨论】:

  • 试试composer dump-autoload
  • @KamleshPaul 感谢您的建议,但同样的问题/错误。不过,也可以通过在我的服务器上运行 php artisan view:cache 来触发相同的错误。但如果我在我的 Mac 上运行相同的命令,它会成功完成。
  • 检查你的 ubuntu views/layouts/app.blade.php 这是礼物吗?
  • @KamleshPaul 是的,它存在。
  • 在同一文件夹/home/forge/default/releases/20201204084441?

标签: php laravel laravel-blade laravel-livewire


【解决方案1】:

我遇到了同样的问题,我通过交叉检查我的文件夹名称来解决它。

请注意,文件夹名称应为components 而不是component

请参阅屏幕截图以获得更好的想法。

示例:

如果您遵循约定,还有一件事是,如果您有一个文件

views/components/admin/side-menu/side.blade.php

您可以将您的组件称为:

&lt;x-admin.side-menu.side&gt;&lt;/x-admin.side-menu.side&gt;

解释:

刀片语法中使用的x- 基本上表明您正在从Components 文件夹中选择文件夹或文件。

.(点)用于您挖掘到要使用的刀片文件的每个目录。

【讨论】:

  • 我花了太长时间才弄清楚我将它命名为组件而不是组件,谢谢:)
【解决方案2】:

这发生在服务器上。尽量不要在文件夹内制作组件.. 我在服务器上遇到了同样的问题,但没有得到任何解决方案, 唯一可行的解​​决方案是将您的组件保留在任何子文件夹之外

【讨论】:

    【解决方案3】:

    当我还是初学者时,我遇到了同样的错误但在我的情况下,一切正常,但有一个小的语法错误&lt;x- card /&gt; 卡片和破折号之间有一个不正确的间隙,所以应该没有空格在破折号和卡片&lt;x-card /&gt; 之间尝试一次,也许这是你的问题。

    【讨论】:

      【解决方案4】:

      好吧,我遇到了同样的问题,但我意识到错误是组件的类名。我没有将类名大写,当我将类名大写时,我不再收到该错误并且我的项目运行良好。

      请尝试将与错误消息中的组件匹配的类名大写。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。感谢您的问题,我可以找到解决方法:D

        在我的例子中,为了更好地组织,我在另一个文件夹中创建了一个组件:

        $ php artisan make:component Tutorial/channelName/Alert
        

        所以它在以下目录中创建了视图组件:

        views/components/tutorial/channel-name/alert.blade.php

        现在,要调用您的组件,您可以这样做:

        <x-tutorial.channelName.alert />
        

        差不多就是这样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-19
          • 2019-03-30
          • 2022-12-03
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          相关资源
          最近更新 更多