jiordiviera
asked

Erreur sur Laravel 10 : "App\Http\Controllers\App\Livewire\LandingPage" non trouvé en tant que contrôleur

Je rencontre un problème sur mon projet Laravel 10 et livewire 3.

Le message d'erreur que je reçois est le suivant :

1Controller class App\Http\Controllers\App\Livewire\LandingPage for one of your routes was not found.
2Are you sure this controller exists and is imported correctly?
1Controller class App\Http\Controllers\App\Livewire\LandingPage for one of your routes was not found.
2Are you sure this controller exists and is imported correctly?

Je suis en train de définir mes routes et je tente de lier un Livewire component à une route, mais j'obtiens cette erreur étrange indiquant que le contrôleur App\Http\Controllers\App\Livewire\LandingPage n'est pas trouvé.

Voici le code de mes routes :

1<?php
2 
3use App\Http\Controllers;
4use App\Livewire;
5use Illuminate\Http\Request;
6 
7 
8 
9Route::get('locale/{locale}', function ($locale) {
10 Session::put('locale', $locale);
11 return redirect()->back();
12});
13 
14Route::get('/', App\Livewire\LandingPage::class);
1<?php
2 
3use App\Http\Controllers;
4use App\Livewire;
5use Illuminate\Http\Request;
6 
7 
8 
9Route::get('locale/{locale}', function ($locale) {
10 Session::put('locale', $locale);
11 return redirect()->back();
12});
13 
14Route::get('/', App\Livewire\LandingPage::class);

Mon composant:

1<?php
2 
3namespace App\Livewire;
4 
5use Illuminate\Support\Facades\Auth;
6use Livewire\Component;
7 
8class LandingPage extends Component
9{
10 public function render()
11 {
12 $user = Auth::User();
13 if (!empty($user)) {
14 return redirect('/' . $user->username . '/dashboard');
15 }
16 
17 return view('livewire.landing-page');
18 }
19}
1<?php
2 
3namespace App\Livewire;
4 
5use Illuminate\Support\Facades\Auth;
6use Livewire\Component;
7 
8class LandingPage extends Component
9{
10 public function render()
11 {
12 $user = Auth::User();
13 if (!empty($user)) {
14 return redirect('/' . $user->username . '/dashboard');
15 }
16 
17 return view('livewire.landing-page');
18 }
19}

Le message d'erreur me dit que Laravel essaie de trouver un contrôleur pour la classe App\Livewire\LandingPage, mais il semble que cela soit un Livewire component et non un contrôleur classique. Laravel semble confondre la classe Livewire avec un contrôleur et essaie de la charger de manière incorrecte.

Jusqu'ici, je n'ai pas utilisé de contrôleur LandingPageController, donc je pense qu'il y a une confusion entre Livewire et les contrôleurs Laravel classiques.

mckenziearts
posted

Quand tu utilises des alias tu ne dois plus préciser le namespace complet dans ta route

tu ne peux pas faire un use App\Livewire; et dans la route faire encore

1Route::get('/', App\Livewire\LandingPage::class);
1Route::get('/', App\Livewire\LandingPage::class);

Tu dois mettre plutot

1Route::get('/', Livewire\LandingPage::class);
1Route::get('/', Livewire\LandingPage::class);

Parce que sinon il va aller chercher dans le dossier controller le fichier Livewire/LandingPage

Confirm deletion

Are you sure you want to delete this reply? This action is irreversible.

jiordiviera
posted

J'avais eu à faire cela , de base le use App\Livewire; n'est pas présent dans le code. Lorsque je fais directement:

1Route::get('/',App\Livewire\LandingPage::class);
1Route::get('/',App\Livewire\LandingPage::class);

J'obtiens toujours l'erreur, Lorsque je fais :

1 
2use App\Livewire\LandingPage;
3 
4Route::get('/',LandingPage::class);
1 
2use App\Livewire\LandingPage;
3 
4Route::get('/',LandingPage::class);

J'obtiens toujours l'erreur: Invalid route action: [App\Http\Controllers\App\Livewire\LandingPage].

Confirm deletion

Are you sure you want to delete this reply? This action is irreversible.

lesage
lesage 530 XP
posted

Salut,

Ton problème vient du fait que Laravel essaie de traiter ton composant Livewire comme un contrôleur classique. Pour résoudre ça, utilise Livewire::route() au lieu de Route::get().

Voici ce que tu dois faire :

  • Modifie ton fichier web.php comme ceci :
1use Illuminate\Support\Facades\Route;
2use Livewire\Livewire;
3 
4Route::get('locale/{locale}', function ($locale) {
5 Session::put('locale', $locale);
6 return redirect()->back();
7});
8 
9// Utilise Livewire::route() pour ton composant
10Livewire::route('/', \App\Livewire\LandingPage::class);
1use Illuminate\Support\Facades\Route;
2use Livewire\Livewire;
3 
4Route::get('locale/{locale}', function ($locale) {
5 Session::put('locale', $locale);
6 return redirect()->back();
7});
8 
9// Utilise Livewire::route() pour ton composant
10Livewire::route('/', \App\Livewire\LandingPage::class);

Assure-toi que :

  • Ton composant LandingPage est bien dans App\Livewire.
  • Ta vue resources/views/livewire/landing-page.blade.php existe et est correcte.

N’hésite pas à tester cette solution et à me donner tes retours pour que je puisse t’aider davantage si nécessaire.

Confirm deletion

Are you sure you want to delete this reply? This action is irreversible.

jiordiviera
posted

J'obtiens maintenant ceci: Call to undefined method Livewire\LivewireManager::route()

Je tiens à préciser que j'utilise livewire 3, et la methode route() n'est pas présente.

Confirm deletion

Are you sure you want to delete this reply? This action is irreversible.

jiordiviera
posted
Best answer

J'ai résolu, le problème, (en fait je continue le travail d'un autre dev), et lui dans le RouteServiceProvider, il affectait directement le namespace App\Http\Controllers, ce qui ausait cette erreur.

Confirm deletion

Are you sure you want to delete this reply? This action is irreversible.

You need Log in or Create an account to join the conversation.

Confirm deletion

Are you sure you want to delete this thread? This action is irreversible.