Juan Gonzalez
Juan Gonzalez
Laravel
Comparte:

Error al crear un controlador

Buenos días, al crear el controlador tipo invoked (-i) y usarlo en ruta del curso Laravel de principiante a experto pero me saca este error al tratar de usarlo en la ruta:
 `PortFolioController` was not found: Controller class `PortFolioController` for one of your routes was not found. Did you mean `PortfolioController`?
La ruta esta escrita así:
 
Route::get('/portfolio','PortFolioController'); 
Y el controller fue creado así:
php artisan make:controller PortfolioController -i
Se debe hacer algo adicional en las versiones actuales ?
Gracias por su valiosa colaboración
Jorge García
Jorge García (2908 xp)
Hola Juan, tienes el controlador que creaste se llama 'PortfolioController' pero lo estás llamando como 'PortfFolioController' la F debe ser minúscula también
Juan Gonzalez
Juan Gonzalez (22 xp)
Actualmente ya están corregidas las mayúsculas pero al ejecutar me muestra el siguiente mensaje

 
UnexpectedValueException
 Invalid route action: [PortfolioController]. 

La ruta esta creada con esta instrucción:

Route::get('/portfolio','PortfolioController'); 

Y el controller fue creado con la instrucción:

php artisan make:controller PortfolioController -i

en el invoke se traslado la definición de la variable portfolio y se retorna la vista
Juan Gonzalez
Juan Gonzalez (22 xp)
Al ejecutar el comando php artisan r:l muestra el siguiente error:

 `PortfolioController` is not invokable: The controller class `PortfolioController` is not invokable. Did you forget to add the `__invoke` method or is the controller's method missing in your routes file? 

Actualmente despues de invoke estas son las instrucciones:

 
   public function __invoke(Request $request)
    {
        $portfolio = [
            ['title' => 'Proyecto #1'],
            ['title' => 'Proyecto #2'],
            ['title' => 'Proyecto #3'],
            ['title' => 'Proyecto #4'],
        ];

        return view('portfolio',compact('portfolio'));
        
    } 
Andres Felipe Florian Gonzalez
Andres Felipe Florian Gonzalez (38 xp)
Lo más probable es que sea por estas realizando un llamado al controlador de la forma incorrecta, aunque todo depende la versión, por ejemplo para última versión al día de hoy seria.

Te envió link de la documentación de Laravel, ahí también vas a encontrar las versiones anteriores.
https://laravel.com/docs/9.x/routing#route-parameters

No te desanimes, esto hace parte del proceso

Route::get(' /portafolio',[PortafolioController::class, 'NombreDelMetodo']);
Jair Ismael Pavón Rosales
Jair Ismael Pavón Rosales (16 xp)
Esto cambia conforme a las versiones de laravel, actualmente yo uso la versión 9.
En el archivo web.php coloque:
 
use App\Http\Controllers\PortfolioController; 

 
Route::get('/portfolio', PortfolioController::class)->name('portfolio'); 
1
Silvano L. G.
Silvano L. G. (16 xp)
Agrega el use de tu controlador en tu archivo web.php.

use App\Http\Controllers\PortFolioController; 

Aunque laravel reconoce la ruta de los controladores en este archivo, no se porque razón acá no reconoce el nombre de la clase, cuando es __invoke. Ahora si puedes agregar el nombre de la función de la siguiente manera:
 
Route::get('/portfolio', [PortFolioController::class, '__invoke']); 

Acabo de encontrar esto, por lo que puedes echarle un ojo para trabajar como la versión 8.

https://stackoverflow.com/questions/63807930/error-target-class-controller-does-not-exist-when-using-laravel-8