Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

Curso de PHP con Laravel

Curso de PHP con Laravel

H茅ctor Benitez

H茅ctor Benitez

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 鈥渁rtisan鈥, encontramos una secci贸n llamada 鈥渕ake鈥 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?

o inicia sesi贸n.

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

Apuntes:
Cuando estamos trabajando con las vistas ubicadas en el archivo de vistas 鈥渞outes/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(鈥榥ombreDeLaVista鈥);
}

Por lo cual, en el archivo 鈥渨eb.php鈥, quedar铆a de la siguiente manera:
Route::get(鈥/鈥, 鈥榥ombreController@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 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']);

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.

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

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

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:
鈥淭arget class Controller does not exist鈥 "

**Se puede resolver as铆:
**Route::get(鈥/鈥,
鈥楢pp\Http\Controllers\HomeController@index鈥);
A帽adiendo ruta.

o la versi贸n m谩s corta:
Route::get(鈥/page鈥, [HomeController::class, 鈥榠ndex鈥橾);

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. 鈥 鈥渟e 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:鈥榥ombre_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 鈥渙 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(鈥/鈥, 鈥楬omeController@index鈥);
Route::get(鈥榠ndex鈥, 鈥楧ashboardController@index鈥);

Hay algo extra帽o que me pasa, que cuando utilizo el comando 鈥減hp 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