Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de PHP con Laravel

Curso de PHP con Laravel

Héctor Benitez

Héctor Benitez

Controladores y recursos

12/25
Recursos

CRUD significa create (crear), read (leer), update (actualizar o editar), delete (eliminar).

resource genera una clase de controlador de tipo recurso. Esto significa que tendremos todo lo necesario para poder hacer CRUD.

  • index: Aquí se despliegan todos los elementos a mostrar.
  • create: Creará nuevos elementos.
  • store: Guardará los elementos creados en create.
  • show: Mostrará a detalle un solo elemento y por eso es que recibe un id.
  • edit: Edita los elementos que mostramos en show.
  • update: Almacena los cambios de edit en la base de datos.
  • destroy: Eliminará los elementos.

En route:list podremos ver todas las rutas que tenemos definidas

Para crear una ruta de un controlador resource no usamos get o post, sino directamente la estructura Route::resource(); ya que de esta manera se nos crearán rutas para cada uno de los métodos anteriormente mencionados que son creados por el controlador resource.

Aportes 59

Preguntas 12

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Si les bota un error inicial es por la falta de use, agregarla en la clase ExpenseReportController.php

use App\ExpenseReport;

En la versión 8.21 de Laravel me aparece un error de la clase ExpenseReportController al hacer route:list de la forma en que la hace el profesor. Lo he resuelto incluyendo el recurso en web.php asi:

<
use App\Http\Controllers\ExpenseReportController;
Route::resource('/expense_reports', ExpenseReportController::class);
>

Otra forma abreviada de ejecutar el comando route list es con r:l

php artisan r:l

Así queda más simplificado

en mi clase controladora ExpenseReportController no me apareció el uso de la clase modelo ExpenseReport en automático, la tuve que gregar manualmente

use App\ExpenseReport;

muy buena esta clase, sobretodo como se simplifica el uso de las rutas

Pueden generar fácilmente endpoints para un API haciendo uso del generador --api Ej. php artisan make:controller --api Api/ExpenseReport que omite los métodos create y edit.

Además añadiendo las rutas en routes/api.php parsea el return directo en formato Json.

agregamos use App\ExpenseReport;

Esta genial lo que hace Laravel, Estoy encantado hasta lo que llevo de curso

Despues de darle vueltas y vueltas, finalmente pude hacer que me saliera la vista en Laravel 9.

Ocupa
use App\Models\ExpenseReport;
despues de
use Illuminate\Http\Request;
para que sepa la ruta que necesitas. Sino te va a salir un error de que ExpennseReportController no existe en App\Http\Controller\ExpenseReport;

desde la version 8.2
<
use App\Http\Controllers\ExpenseReportController;
Route::resource(’/expense_reports’, ExpenseReportController::class);

Otra forma de hacerlo y que considero mas limpia a la hora de pasar datos a una vista:

public function index(){
$expenseReports = ExpenseReport::all();
return view('expenseReport.index', compact('expenseReport'));
}

PD: me perdonan si hay algun error de sintaxis, lo hago de memorio desde una computadora alternativa.

EL plugin laravel artisan (Ryan Nadddy) de Visual Code, muestra de una forma más vistosa el route:List

Ami me faltaba exportar la clase ExpenseReport, solo con use App\ExpenseReport; se arreglo

Tengo el siguiente problema
Error
Class ‘app\ExpenseReport’ not found

Mi Controlador esta de la siguiente manera:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use app\ExpenseReport;

class ExpenseReportController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
return ExpenseReport::all(); <---- que se refleja el error

}

Sin problema!

Yo mando de esta forma la información por medio de la función index

public function index()
    {
        $expenseReports = ExpenseReport::all();
        return view('expenseReport.index', compact('expenseReports'));
    }```

Hola …consulta
no entiendo de donde sale el segundo expenseReports en el siguiente código

 public function index()
    {
        return view('expenseReport.index', [
            'expenseReports' => ExpenseReport::all()
        ]);

    }```

gracias por este curso

Me sale el siguiente error en mi navegador, ala hora de poner la ruta: http://localhost:8000/expense_report

 Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Class 'App\Http\Controllers\ExpenseReport' not found

Tengo mi route/web bien, tengo mi modelo bien, que pasaría?

siento que me va muchisimo mejor en este curso que en el de PHP jajaja

Profesor lo felicito por la forma como esta explicando este curso, desde mi perspectiva bastante claro.

Nunca había toca Laravel y lo he comprendido bastante, gracias.

Notas:

  • Un C.R.U.D son las siglas de CREATE,READ,UPDATE y DELETE haciendo referencia a las diferentes clases que crearemos para cumplir con cada una de esas referencias de las siglas.

  • Una clase controlador de tipo de source es un tipo de clase especial que nos trae los metodos necesarios para ejecutar las acciones del modelo CRUD.

  • Si modificamos el archivo web.php y le añadimos la ruta del tipo source que acabamos de agregar, automaticamente generara las rutas para cada uno de los metodos del controllador de tipo source¨.

Les comparto el código que es necesario adicionar en el archivo index.blade.php

<div class="content">
    <div class="row">
        <div class="col">
            <h1>Reports</h1>
            <table class="table">
            	@foreach($expenseReports as $expenseReport)
                <tr>
                    <td>{{ $expenseReport->id }}</td>
                    <td>{{ $expenseReport->title }}</td>
                </tr>
            	@endforeach
            </table>
        </div>
    </div>
</div>

Me salia este error: Illuminate\Database\QueryException
SQLSTATE[HY000] [1049] Unknown database ‘laravel’ (SQL: select * from expense_reports)
Cuando el nombre de mi database estaba bien configurado, busque en distintos foros y sugerian: ctrl c y volver a correr php artisan server. Me seguia dando el mismo error, otro sugerio php artisan cache:clear tmp me funciono, hasta que buscando encontre este comando php artisan config:cache y por fin me funciono!!!

para Larave 9.x los controllers sí deben ir con toda ruta completa de lo contrario hay errores.

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

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

Route::resource('/expense_reports', '\App\Http\Controllers\ExpenseReportController');

Excelente explicacion

Yo tambien al igual que muchos no me mostraba la coleccion de datos. Recomendacion arriba en archivo del controlado verificar que
tengamos el use App\ExpenseReport; y posteriormente escribir en le index **return ExpenseReport::all(); **

Excelente el uso de controlador y las vistas

Illuminate\Database\QueryException
http://127.0.0.1:8000/expense_reports

Laravel Route::resource();

es posible crear rutas tipo resource pero en este caso para un controller tipo --api, es decir sin la ruta create y edit?

use App\ExpenseReport;
.
.
public function index()
{
return ExpenseReport::all();
}

al escribir
"ExpenseReport::all()“
no me automatiza el
"use App\ExpenseReports”
=’(

Alguien tiene una idea de porque me aparece este error:

"Class 'App\Http\Controllers\Report' not found"```

public function store(Request $request)
{
$report = new ExpenseReport();
$report->title = $request->get(‘title’); // No deberia ser post $request->post(‘title’)
$report->save();

    return redirect('/expense_reports');
}

Significa que en 1 solo archivo vamos, a tener estos elementos de crear, editar y borrar un registro de una tabla de la DB?

Tengo un problema, tengo una vista llamada index en donde con un formulario modal estoy registrando a los nuevos usuario, los mismo estoy haciendo para editar recupero los datos y los cargo en los campos del formulario modal, mi pregunta es ruta debo de darle para re edite los datos en el cotrolador y me vuelva a cargar la vista index en donde estan listados los demas usuario.

Hay formas más simples para enviar datos a una vista con el objeto de hacer listados:

/* en el controlador*/
public function index()
{
$users = Users::orderBy(‘id’, ‘ASC’)->paginate(‘10’);
return view(‘users.index’)->with(‘users’, $users);
}

Para el listado (visualización), la sintaxis es la misma que la dada en la clase, y se puede repetir el llamado varias veces para mostrar los diferentes campos que componen el registro…

Hola, estoy trabajando en un proyecto personal. Tengo un problema al tratar de mostrar los datos que envío a la vista desde el controlador. Cuando muestro el contenido de la variable en mi vista que sería: {{ $reporteEscuela}} se muestra en pantalla sin ningún problema pero me da error cuando acccedo de esta forma: {{ $reporteEscuela->nombre_escuela}}

Estoy agregado un registro

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'matricula2.inicial_models' doesn't exist (SQL: select * from `inicial_models` where `inicial_models`.`deleted_at` is null)

Hola estoy usando laravel 5.7.6 es lo que esta definido en coposer.json, mi pregunta es cuando creo un controlador solo viene por defecto el metodo index(), los demas que se exponen aquí no estan. (create, store, show, etc).

A pesar de haber configurado el nombre correcto de mi base de datos, al momento consultar expense_reports obtengo este error:

Obviamente, reitero, ya en mi archivo .env esta seteado el nombre correcto.

Hola que tal he intentado todo conforme a la clase sin embargo me sale el siguiente error:

Symfony\Component\Debug\Exception\FatalThrowableError thrown with message “Class ‘App\Http\Controllers\ExpenseReport’ not found”

Stacktrace:
#52 Symfony\Component\Debug\Exception\FatalThrowableError in C:\MAMP\htdocs\curso-laravel\app\Http\Controllers\ExpenseReportController.php:16
#51 App\Http\Controllers\ExpenseReportController:index in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
#50 call_user_func_array in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:54
#49 Illuminate\Routing\Controller:callAction in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:45
#48 Illuminate\Routing\ControllerDispatcher:dispatch in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php:219
#47 Illuminate\Routing\Route:runController in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php:176
#46 Illuminate\Routing\Route:run in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php:680
#45 Illuminate\Routing\Router:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:30
#44 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php:41
#43 Illuminate\Routing\Middleware\SubstituteBindings:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#42 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#41 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:75
#40 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#39 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#38 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php:49
#37 Illuminate\View\Middleware\ShareErrorsFromSession:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#36 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#35 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php:56
#34 Illuminate\Session\Middleware\StartSession:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#33 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#32 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php:37
#31 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#30 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#29 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php:66
#28 Illuminate\Cookie\Middleware\EncryptCookies:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#27 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#26 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
#25 Illuminate\Pipeline\Pipeline:then in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php:682
#24 Illuminate\Routing\Router:runRouteWithinStack in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php:657
#23 Illuminate\Routing\Router:runRoute in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php:623
#22 Illuminate\Routing\Router:dispatchToRoute in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php:612
#21 Illuminate\Routing\Router:dispatch in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:176
#20 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Http{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:30
#19 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\fideloper\proxy\src\TrustProxies.php:57
#18 Fideloper\Proxy\TrustProxies:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#17 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#16 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:21
#15 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#14 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#13 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\TransformsRequest.php:21
#12 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#11 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#10 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\ValidatePostSize.php:27
#9 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#8 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#7 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php:62
#6 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:163
#5 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:53
#4 Illuminate\Routing\Pipeline:Illuminate\Routing{closure} in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:104
#3 Illuminate\Pipeline\Pipeline:then in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:151
#2 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in C:\MAMP\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:116
#1 Illuminate\Foundation\Http\Kernel:handle in C:\MAMP\htdocs\curso-laravel\public\index.php:55
#0 require_once in C:\MAMP\htdocs\curso-laravel\server.php:21

`![](<code>
)````

Apuntes:
Un CRUD es el acronimo de CREATE, READ, UPDATE y DELETE, consecutivamente
Al usar el comando php artisan make:controller -help, podremos ver entre la lista de opciones “–resource”, que nos va a ayudar a crear un controlador de tipo recurso, lo que nos va a servir para crear nuestro CRUD dentro del controlador y posteriormente, desplegarlo en las rutas de “web.php”.

Me parece magnifico lo que hace Laravel. Facilita mucho las cosas realmente

me da el siguiente error

Symfony\Component\Debug\Exception\FatalThrowableError Class 'App\Http\Controllers\ExpenseReport' not found

unused element ‘ExpenseReportController’

Me da el siguiente error:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Class ‘App\Http\Controllers\ExpenseReport’ not found

Excelente! Vamos muy bien! 😃

jajajaja, me arrojó el error, que no encontraba la clase y como 10 minutos buscando, hasta ejecuté de nuevo el <<php artisan tinker>> para caer en cuenta que no tenía el <<use>> de la clase y me dio por ver en los comentarios y ahí estaba la solución.

Genial 😃

Siempre creí que Laravel era un framework gráfico tipo eclipse o netbeans, así no se entiende nada y menos con ese profesor, si solo copiamos código que el vaya haciendo no se aprende nada

Funciona muy bien todo hasta el momento.

En la versión 8.0.3 de laravel sería :

Route::apiResource('expense_reports' , DashboardController::class);

Básicamente una ruta de tipo resource te da el acceso a las 7 rutas básicas de un CRUD.

Recuerden, CRUD significa: Create, Read, Update, Delete

Un punto importante, en la clase la URL se está manejando como “express_reports” es válido, pero si trabajamos con SEO, los guiones bajos no son bien vistos por Google, así que es una buena práctica manejar esto con guiones medios, así que debería ser “express-reports”

Genial! Muy interesante

si te pegaste en el minuto 6 aca esta el web.php

Route::resource(’/expense_reports’, \App\Http\Controllers\ExpenseReportController::class, );

Siempre que necesite hacer un CRUD, debería generar con resource???