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 :

Controller class App\Http\Controllers\App\Livewire\LandingPage for one of your routes was not found.
Are 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 :

<?php
 
use App\Http\Controllers;
use App\Livewire;
use Illuminate\Http\Request;
 
 
 
Route::get('locale/{locale}', function ($locale) {
Session::put('locale', $locale);
return redirect()->back();
});
 
Route::get('/', App\Livewire\LandingPage::class);

Mon composant:

<?php
 
namespace App\Livewire;
 
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
 
class LandingPage extends Component
{
public function render()
{
$user = Auth::User();
if (!empty($user)) {
return redirect('/' . $user->username . '/dashboard');
}
 
return view('livewire.landing-page');
}
}

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

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

Tu dois mettre plutot

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

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

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:

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

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

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

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

lesage
lesage 415 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 :
use Illuminate\Support\Facades\Route;
use Livewire\Livewire;
 
Route::get('locale/{locale}', function ($locale) {
Session::put('locale', $locale);
return redirect()->back();
});
 
// Utilise Livewire::route() pour ton composant
Livewire::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.

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.

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.

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