Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Controladores en Laravel

5/25
Recursos

Basados en el modelo MVC, vimos que las vistas las tenemos en resources/views, igualmente en la carpeta app/Http/Controllers podremos definir nuestros controladores.
Aunque podemos utilizar closures directamente dentro de las rutas, Laravel viene preparado para que trabajemos con controladores.

  • Cuando utilizamos el comando “artisan”, encontramos una sección llamada “make” que nos va a permitir crear diferentes cosas en el proyecto. make:controller nos crea un nuevo controlador.
  • En nuestro archivo web.php, en la parte de los parámetros, en vez de poner un closure vamos a poner el nombre del controlador que creamos seguido de una @ y finalizando el método que llamaremos de ese controlador.

Aportes 39

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hola a todos, en caso uds al igual que yo instalan la version 2020 de Laravel la 8.11.2, les comento que la parte de crear una ruta utilizando en controlador ha cambiado, en la clase se ve asi:

Route::get('/', 'HomeController@index');

y en la version 8 lo maneja de esta forma

Route::get('/', [\App\Http\Controllers\HomeController::class, 'index']);

Como podemos ver Laravel en esta version nos pide que coloquemos la ruta de nuestro controlador, en caso contrario nos dira que el controlador no existe.

En caso que no les guste ver una ruta tan larga ya que muchas veces es necesario agregar codigo se puede hacer de la siguiente forma.

use App\Http\Controllers\HomeController;
Route::get('/', [HomeController::class, 'index']):

Les dejo la documentacion para corroborar, muchos exitos Saludos
https://laravel.com/docs/8.x/controllers

Les comparto una imagen del funcionamiento del Modelo-Vista-Controlador.

Es importante mantener el archivo de rutas web.php libre de código de lógica, este archivo debe estar siempre dedicado a rutas y únicamente rutas, precisamente para eso llegaron los controladores, para que pongas tu código de lógica ahí y no en las rutas 😄

Me Encanto este comando…

php artisan make:controller PhotoController --resource

hola me aparece el siguiente error Illuminate\Contracts\Container\BindingResolutionException
Target class [HomeController] does not exist.
verifique las rutas y que este bien escrito todo pero sigue apareciendo.

Apuntes:
Cuando estamos trabajando con las vistas ubicadas en el archivo de vistas “routes/web.php”, se nos puede volver algo tedioso y de poco mantenimiento escribir tanto la vista como el closure, por ello es mas recomendable trabajar con los closures dentro de los controladores directamente.
Una buena manera de crear un controller, es a través del CMD con el comando php artisan, de la siguiente manera:

  • php artisan make:controller [nombreDelController]

Una vez creado el controller, creamos un método dentro (en este caso index()) para llamar a la vista, el cual quedaría de esta forma:
public function index()
{
return view(‘nombreDeLaVista’);
}

Por lo cual, en el archivo “web.php”, quedaría de la siguiente manera:
Route::get(’/’, ‘nombreController@index’);

Pregunta, seria mejor usarlo en vagrant como en el curso php avanzado? en lo personal asi lo estoy usando

El profesor va directo al grano, es más práctico…

Para detener php artisan serve en windows se usa la combinacion de teclas Ctrl+C

Laravel te ahorra mucho tiempo, me gusto el comando make controller

En el 2022 se deberá poner de está forma
Primero agregar esto al web.php

use App\Http\Controllers\HomeController;
use App\Http\Controllers\DashboardController;

Y luego hacerlo de esta forma.

Route::get('/', [HomeController::class, 'index']);

Route::get('/test', [DashboardController::class, 'index']);

https://laravel.com/docs/9.x/controllers

En laravel 8 y 9 web.php:

<?php

use App\Http\Controllers\DashboardController;
use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route;



Route::get('/', [HomeController::class, 'index']);

Route::get('/dashboard', [DashboardController::class, 'index']);

Excelente el uso del CLI artisan de Laravel

Hola a todos! para los que se encuentren trabajando con la versión 8.83.26 de Laravel deben cambiar la ruta por la siguiente:

<?php

use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route;

Route::get('/', [HomeController::class, 'index']);

Aquí les dejo el link a la documentación de Laravel sobre las rutas: https://laravel.com/docs/8.x/routing

Si alguien los esta haciendo con laravel 8 ó 9 el archivo web.php quedaría así:

Route::get('/',[HomeController::class, 'index']);

Route::get('/dashboard',[DashboardController::class, 'index']);

Senores tengo incoveniente con esto por favor si me pueden dar una mano.

Amo Laravel!

Excelente que funcione a la primera!

excelente como podemos observar pasamos rapidamente por el modelo vista controlador con este sencillo ejemplo, los controladores funcionado en conjunto con las rutas haciendo el llamado a las vistas!!! genial

se esta poniendo interesante la parte de controladores

Para las últimas versiones de php y laravel, cuando agreguen el return view en la función index del HomeController, deben omitir el “view:”. De lo contrario les generará un error.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    public function index() {
        return view('welcome');
    }
}

Para utilizar una funcion declarada en el "HomeController" primero debemos "importar" esa clase: - use App\Https\Controllers\HomeController; (No necesitamos agregar el .php) Luego debemos agregar en donde va 'homeController@index' la nueva forma de hacer las cosas: - Route('/', [ HomeController::class, 'index' ]) "Esto llama la clase index dentro del controlador (HomeController)".

En la versión de laravel 8 para 10, podría generarte un error en web.php:
“Target class Controller does not exist” "

**Se puede resolver así:
**Route::get(’/’,
‘App\Http\Controllers\HomeController@index’);
Añadiendo ruta.

o la versión más corta:
Route::get(’/page’, [HomeController::class, ‘index’]);

Ambas funcionan.

¿Siempre es necesario tras una actualización en el código ejecutar el comando
php artisan serve
?
Parece engorroso siempre ejecutarlo.

Antes de continuar sumando mas conceptos, aclarar como funciona el framework:
.

  1. Punto de entrada: index.php se ubica en la carpeta publica del proyecto
  2. autoload de las clases y librerias del framework, tambien carga los paquetes de terceros dentro de vendor.
  3. bootstrapping: (es una buena paractica), por convencion se hace bootstrapping par cargar el ambiente del proyecto. – “se enciende el framework”.
  4. Request: Se activa el escuchador de solicitudes (request), el framework queda pendiente de cualquier peticion
  5. El request le envia la solicitud al routery este puede responder de varias formas asi:
    • devuelve una cadena de texto
    • devuelve una vista (blade, react ,vue, etc)
    • es capaz de devolver un array en formato .json
    • lo mas importante (para seguir el modelo MVC) carga el controlador correspondiente
  6. El controlador, de acuerdo a la solicitud (tomada por el request y enrutada por el router) ejecuta la accion solicitada.

para aquellos que toman el curso ahora en la ultima version de laravel para retornar una vista, el codigo es ahora

<code>  return view('nombre_del_view')

es decir ya no es necesario escribir view:‘nombre_del_view’

Las rutas son fundamentales en Laravel, si este no se tiene claro lo mejor no es seguir hasta entender lo que sigue.

El curso está algo desactualizado. Deberían actualizar clases como estas, dado que la forma de crear las rutas a hoy, en noviembre de 2021, ha cambiado…

¿Se puede separar en otro archivo .php las funciones como para reutilizar en los controladores?. Como se haría

La mejor practica es ejecutar este comando
php artisan make:model Category -m -c -r
que aparte del modelo, crea la migracion y el controlador de tipo resource

Anotaciones: si estas haciendo este curso con la Versión 7 “o superior” de Laravel te recomiendo:

El comando:

php artisan -help

Ha cambiado, ahora puedes listar los comando con:

php artisan list

Excelente, entendi mejor el flujo de los datos con los controlladores.

¡Súper bien!

Hector ; Felicitaciones viejo, el concepto de Closure relacionado con una función anónima y la forma como lo explicas demuestra claridad en los conceptos y eso es muy importante a la hora de enseñar.

Conclusión: En el archivo web.php se crean las rutas y se redireccionan a los Controladores y desde ahí se cargan las Vistas.

😃

Route::get(’/’, ‘HomeController@index’);
Route::get(‘index’, ‘DashboardController@index’);

Hay algo extraño que me pasa, que cuando utilizo el comando “php artisan serve” queda started de forma correcta, cuando ingreso desde el navegador se me muestra bien pero se reinicia el servidor y cambia de puerto hacia el siguiente. Es decir, inicia de la siguiente forma:

Laravel development server started: http://127.0.0.1:8000

Luego de acceder a la web desde el navegador aparece:

Laravel development server started: http://127.0.0.1:8001

¿Tienen idea qué puede ser? Googleé, pero nada.

Excelente!

Lo saque de los Patrones GOF

	**Applying the Model View Controller (MVC)**
		**Pattern**

• Model View Controller (MVC) pattern is an
architectural pattern
• MVC separates presentation management from core
application logic
• Useful in applications where the user interface might
frequently change
• MVC can be adapted to Web applications