No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Laravel 9

Curso de Introducción a Laravel 9

Profesor Italo Morales F

Profesor Italo Morales F

Controles de un formulario

19/31
Recursos

Aportes 8

Preguntas 4

Ordenar por:

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

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:

  • Para el input
<input type="text" name="title" id="title" class="rounded border-gray-200 w-full mb-4" value="{{ isset($post) ? $post->title : '' }}" 
/>
  • Para el textarea
<textarea name="body" id="body" rows="5" class="rounded border-gray-200 w-full mb-4">{{ isset($post) ? $post->body : '' }}</textarea>
excelente clase

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>