Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel "Unable to locate a class or view for component" in production environment

I develop on a Mac locally. Latest version of Big Sur.

Today I went to deploy my app to production via an Ubuntu server through Forge, and got greeted with an error I've never seen before, and can't find an answer to online. I can see MANY people complaining about it, but all anyone has said on other answers is link to issues that don't have solutions or even explanations really, so that's why I'm asking a new question.

The exact error is this; Unable to locate a class or view for component [layouts.base]. (View: /home/forge/default/releases/20201204084441/resources/views/layouts/app.blade.php)

In my app I have; app\View\Components\Layouts\App.php which looks like this;

<?php

namespace App\View\Components\Layouts;

use Illuminate\View\Component;

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

Then I also have; resources\views\layouts\app.blade.php

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

(Also pretty much the same for base)

Works flawlessly on Mac. As soon as I deploy it on Ubuntu, I get the error above that it is "unable to locate a class or view" with those names.

Can someone please instruct me on how I can go about fixing this, since so far I have absolutely no idea and despite knowing that case sensitivity is probably the issue as per the other questions about this, I cannot find any actual solution or way to resolve this.

like image 264
Borassign Avatar asked Dec 04 '20 09:12

Borassign


3 Answers

I had the same problem. Thanks to your question, I could find out how to solve it :D

In my case, I had created a component inside another folder, for better organization sake:

$ php artisan make:component Tutorial/channelName/Alert

So it created the view component inside the following directory:

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

Now, to call your component you do it this way:

<x-tutorial.channelName.alert />

That's pretty much it.

like image 51
Pathros Avatar answered Oct 17 '22 21:10

Pathros


I was facing the same issue and I fixed it by cross-checking my folder name.

Please note that the folder name should be components and not component.

Refer the screenshot for a better idea.

enter image description here

Example:

In case you are following the convention, one more thing is that if you have a file at

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

You can call your Component as:

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

Explained:

The x- used in the blade syntax basically tells that you are selecting folder or file from the Components folder.

The . (dot) used is for every directory you dig to the blade file you want to use.

like image 3
Erielama Avatar answered Oct 17 '22 22:10

Erielama


Well, I had the same problem but I realized that the error was the class name of the component. I didn't capitalize the class name and when I did capitalize the class name I stopped getting that error and my project worked well.

Please try capitalizing the class name that matches the component in the error message.

like image 1
Codeparl Avatar answered Oct 17 '22 21:10

Codeparl