Este curso esta genial, ojalá sigan haciendo mas cursos de laravel, y con el profesor italo
Introducción a Laravel
Introducción a Laravel 9: Configuración Inicial y Bienvenida
Estructura principal de Laravel
Fundamentos de Laravel
Uso de Artisan en Laravel: Comandos y Funciones
Manejo de Solicitudes HTTP en PHP
Uso de Blade para Crear Vistas en Laravel
Configuración de Plantillas para Vistas Reutilizables en Laravel
Controladores en Laravel: Gestión de Rutas y Peticiones
Cómo Crear Migraciones en Laravel
Cómo Crear Modelos en Laravel
Manejo de Datos con Eloquent en Laravel
Configuración de Relaciones entre Tablas con Eloquent
Manos a la obra con nuestro proyecto
Enfoque del proyecto
Inicio de sesión
Sistema de inicio de sesión
Panel administrativo
Listado de publicaciones
Función de eliminar
Crear y editar (primer paso)
Controles de un formulario
Función de guardar
Función de editar
Validación
Registros duplicados
Trabajemos en el diseño web de nuestro proyecto
Diseño web
Diseño personalizado
Página home
Destacado
Publicación individual
Buscador
Optimización
Cierre
Mejoras Finales y Cierre del Proyecto en Laravel
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 8
Preguntas 4
Este curso esta genial, ojalá sigan haciendo mas cursos de laravel, y con el profesor italo
Si al momento de imprimir el valor del post tanto de title como de body se le antepone un @ no será necesario mandar Post $post en la función create(), por ejemplo:
Funciones de edit() y create():
public function create(){
return view('posts.create');
}
public function edit(Post $post){
return view('posts.edit', compact('post'));
}
Código del archivo _form.blade.php():
<label class="uppercase text-gray-700 text-xs">Título</label>
<input type="text" name="title" class="rounded border-gray-200 w-full mb-4" value="{{ @$post->title }}">
<label class="uppercase text-gray-700 text-xs">Contenido</label>
<textarea name="body" id="" rows="5" class="rounded border-gray-200 w-full mb-4">{{ @$post->body }}</textarea>
<div class="flex justify-between items-center">
<a href="{{ route('posts.index') }}" class="text-indigo-600">Volver</a>
<input type="submit" value="Enviar" class="bg-gray-800 text-white rounded px-4 py-2">
</div>
Tengo mi código así y funciona sin problemas. 😁
Importante, tuve un error con Create y no hallaba cual era.
Revise algunos foros y me percate que al momento de hacer un CRUD con laravel las rutas deben estar en plural. Así que dejo un breve guia:
Controller: Singular
Model: Singular
Routes: Plural (sobretodo si usas CRUD)
Espero que les sirva y no pasen 2 horas (como yo) buscando que esta mal.
Para el botón de envío se puede usar también el isset($post)
y así variar el contenido o texto del botón para los casos de edición o creación, ya que si se recibe información de $post
, significa que se desea editar, y en caso contrario, estarémos creando una nueva publicación.
<div class="flex gap-4 items-center justify-between">
<a href="{{ route('posts.index') }}" class="text-indigo-600">Volver</a>
<button type="submit" class="bg-gray-800 text-white rounded px-4 py-2">{{ isset($post) ? 'Editar Post' : 'Crear Post'}}</button>
</div>
Por algún motivo a mi me sigue arrojando el mismo error de Undefined variable $post al momento de querer crear un post, por más de que agregue el parámetro de $post en el método de create y mi solución fue esta:
<input type="text" name="title" id="title" class="rounded border-gray-200 w-full mb-4" value="{{ isset($post) ? $post->title : '' }}"
/>
<textarea name="body" id="body" rows="5" class="rounded border-gray-200 w-full mb-4">{{ isset($post) ? $post->body : '' }}</textarea>
Si quieren ver los cambios de html y el front en general usen npm run dev para verlos apenas guarden, mientras también tienen activo el comando php artisan serve en otro terminal
Una opción que hice al mostrar el formulario de posts fue usando Null coalescing operator.
Ya que si el primer valor es nulo, entonces mostrará el siguiente dato si existe:
<label for="" class="uppercase text-gray-700 text-xs">Título</label>
<input type="text" name="title" class="rounded border-gray-200 w-full mb-4" value="{{$post->title ?? old('title') ?? ''}}">
<label for="" class="uppercase text-gray-700 text-xs">Contenido</label>
<textarea rows="10" name="body" class="rounded border-gray-200 w-full mb-4">{{$post->body ?? old('body') ?? ''}}</textarea>
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?