jiordiviera
a posé

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
a répondu

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

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

jiordiviera
a répondu

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].

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

lesage
lesage 530 XP
a répondu

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.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

jiordiviera
a répondu

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.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

jiordiviera
a répondu
Meilleure réponse

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.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

Il faut Se connecter ou Créer un compte pour participer à cette conversation.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer ce sujet ? Cette action est irréversible.