réponses
112 vues
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<?php23use App\Http\Controllers;4use App\Livewire;5use Illuminate\Http\Request;6789Route::get('locale/{locale}', function ($locale) {10 Session::put('locale', $locale);11 return redirect()->back();12});1314Route::get('/', App\Livewire\LandingPage::class);1<?php23use App\Http\Controllers;4use App\Livewire;5use Illuminate\Http\Request;6789Route::get('locale/{locale}', function ($locale) {10 Session::put('locale', $locale);11 return redirect()->back();12});1314Route::get('/', App\Livewire\LandingPage::class);
Mon composant:
1<?php23namespace App\Livewire;45use Illuminate\Support\Facades\Auth;6use Livewire\Component;78class LandingPage extends Component9{10 public function render()11 {12 $user = Auth::User();13 if (!empty($user)) {14 return redirect('/' . $user->username . '/dashboard');15 }1617 return view('livewire.landing-page');18 }19}1<?php23namespace App\Livewire;45use Illuminate\Support\Facades\Auth;6use Livewire\Component;78class LandingPage extends Component9{10 public function render()11 {12 $user = Auth::User();13 if (!empty($user)) {14 return redirect('/' . $user->username . '/dashboard');15 }1617 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.
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
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 :
12use App\Livewire\LandingPage;34Route::get('/',LandingPage::class);12use App\Livewire\LandingPage;34Route::get('/',LandingPage::class);
J'obtiens toujours l'erreur: Invalid route action: [App\Http\Controllers\App\Livewire\LandingPage].
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.phpcomme ceci :
1use Illuminate\Support\Facades\Route;2use Livewire\Livewire;34Route::get('locale/{locale}', function ($locale) {5 Session::put('locale', $locale);6 return redirect()->back();7});89// Utilise Livewire::route() pour ton composant10Livewire::route('/', \App\Livewire\LandingPage::class);1use Illuminate\Support\Facades\Route;2use Livewire\Livewire;34Route::get('locale/{locale}', function ($locale) {5 Session::put('locale', $locale);6 return redirect()->back();7});89// Utilise Livewire::route() pour ton composant10Livewire::route('/', \App\Livewire\LandingPage::class);
Assure-toi que :
- Ton composant LandingPage est bien dans
App\Livewire. - Ta vue
resources/views/livewire/landing-page.blade.phpexiste 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.
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.
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.
Il faut Se connecter ou Créer un compte pour participer à cette conversation.