Laravel在生产环境中出现“无法找到组件的类或视图”的错误

21

我在本地使用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>

(基本上也是一样的)

在 Mac 上可以无缝运行。但是一旦我在 Ubuntu 上部署它,就会出现上述错误,即找不到这些名称的类或视图。

请问有人可以指导我如何解决这个问题吗?因为迄今为止我完全没有任何想法,尽管知道大小写敏感可能是问题所在,就像其他关于此问题的提问那样,但我找不到任何实际的解决方案或解决方法。


1
尝试运行 composer dump-autoload - Kamlesh Paul
@KamleshPaul 感谢您的建议,但问题/错误仍然存在。在我的服务器上运行php artisan view:cache也会触发相同的错误。但是,如果我在我的 Mac 上运行相同的命令,则可以成功完成。 - Borassign
1
请检查您的Ubuntu系统中是否存在views/layouts/app.blade.php文件? - Kamlesh Paul
@KamleshPaul 是的,它存在。 - Borassign
在同一文件夹/home/forge/default/releases/20201204084441中吗? - Kamlesh Paul
@KamleshPaul 是的,那个也有布局文件。 - Borassign
13个回答

22

我遇到了同样的问题。多亏了您的问题,我找到了解决方法:D

在我的情况下,我在另一个文件夹中创建了一个组件,以更好地组织它:

$ php artisan make:component Tutorial/channelName/Alert

因此,它在以下目录中创建了视图组件:

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

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

<x-tutorial.channelName.alert />

就这样啦。


6

我曾面临相同的问题,通过交叉检查我的文件夹名称来解决了这个问题。

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

参考截图 以获得更好的理解。

enter image description here

示例:

如果您遵循惯例,还有一件事情,就是如果您在以下路径拥有一个文件:

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

您可以将组件命名为:

<x-admin.side-menu.side></x-admin.side-menu.side>

说明:

Blade 语法中使用的 x- 实际上表示您正在从 组件 文件夹中选择文件或文件夹。

使用的 . (点)是为了让您深入每个目录到您想要使用的 Blade 文件。


花了我太长时间才发现我把它命名为component而不是components,谢谢 :) - bdbdbd

3

我曾经遇到过同样的问题,后来发现问题出在组件的类名上。当我将类名首字母大写后,错误消失了,项目也正常运行。

请尝试将与错误信息中组件对应的类名首字母大写。


2

在我的情况下,我没有在组件中提供命名空间,在提供命名空间后问题得到解决。


1
提到的问题在于区分大小写
对于本地来说看起来是不区分大小写的原因,这样它在本地运作得很完美但在服务器上就会出问题。
如果您在任何新文件夹中创建了新组件,例如:
$ php artisan make:component Widgets/CustomAlert

它将为组件创建两个文件,类文件和 blade 文件。 类文件

app\Views\Components\\CustomAlert.php

刀片文件

resources\views\components\widgets.custom-alert.blade.php

你可以使用类或者Blade文件来渲染组件。 对于类,请确保文件夹和类名大小写敏感。 例如:

<x-Widgets.CustomAlert />

渲染 Blade 文件应该是这样的

<x-widgets.custom-alert />

注意 如果您手动重新定位文件,请确保类文件中的命名空间、文件名和组件调用语法匹配(区分大小写)

示例仅供参考,请尝试将语法和名称与您的文件夹进行比较。

希望能对您有所帮助 :)


1

看起来你缺少 Laravel 中视图文件夹内的 Components 文件夹,请确保你的文件结构中有该文件夹,如果没有,那么只需运行以下命令:

composer update

它将会添加你缺少的组件文件夹以及其他你的项目所缺失的文件


0

我在Ubuntu上遇到了同样的问题,尽管在Mac和Windows上完美运行。但是我设法通过替换来解决它。

<x-header />

使用

<?php
$header = new header;
echo $header->render();
?>

并包括在顶部

use App\Views\Components\header;

0
有几次遇到了这个问题。每次原因都是因为我不够注意。例如,使用了x-frontend-layouts-services而不是x-frontend.layouts.services。所以一定要仔细检查一切。

0

当我是一个初学者时,我也遇到了同样的错误。但在我的情况下,一切都很好,只是有一个小的语法错误<x- card />,card和dash之间有一个空格,这是不正确的,所以破折号和card之间不应该有空格<x-card />,所以你可以尝试一次,也许这就是你的问题。


0
在我的情况下,我创建了一个名为AppLogo的类,并且将其生成为app-logo.blade.php的blade文件。
然而,在我的视图文件中,我引用了组件作为x-applogo,这在本地环境下工作正常,但在生产环境(即托管服务器)上出现了错误。
解决方案: 我将所有在我的blade/view文件中出现的x-applogo都改为了x-app-logo
这在开发和生产环境中都起作用。
希望对某些人有所帮助。

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