57. Formulario para crear nuevo post

En este capítulo aprenderás cómo crear un formulario para crear nuevos posts en tu proyecto de Laravel. Aprenderás a crear la vista de formulario y a utilizar la validación de formularios de Laravel para validar los datos de entrada del usuario y asegurarte de que sean correctos antes de guardarlos en la base de datos. También aprenderás a utilizar la sintaxis de Eloquent para crear y guardar nuevos posts en la base de datos, y a redirigir al usuario a la página de visualización de posts después de crear un nuevo post. Al final del capítulo, tendrás una comprensión completa de cómo crear y guardar nuevos posts en Laravel, lo que te permitirá crear y administrar fácilmente contenido para tu blog.


4 comentarios

Inicia sesión para comentar

Comentarios:

  • Walter

    Walter hace 1 año

    ? 4° Aplicar el plugin CKEditor 5 en la vista create.blade.php

    Utilizamos el CDN que copiamos del sitio ckeditor.com/ckeditor-5/download/ y actualizamos el section de JS:

    @section('js')
    <script src="{{ 
    	asset('vendor/jQuery-Plugin-stringToSlug-1.3/jquery.stringToSlug.min.js') 
    }}">
    
    <script src="https://cdn.ckeditor.com/ckeditor5/24.0.0/classic/ckeditor.js">
    </script>
    
    <script>
    	$(document).ready( function() {
    		$("#name").stringToSlug({
    			setEvents: 'keyup keydown blur',
    			getPut: '#slug',
    			space: '-'
    		});
    	});
    	
    	ClassicEditor
    	.create( document.querySelector( '#extract' ) )
    	.catch( error => {
    		console.error( error );
    	} );
    	
    	ClassicEditor
    	.create( document.querySelector( '#body' ) )
    	.catch( error => {
    		console.error( error );
    	} );
    
    </script>
    @endsection

     

  • Walter

    Walter hace 1 año

    ? 3° Configuración del controlador PostController

    <?php 
    namespace App\Http\Controllers\Admin;
     
    use App\Http\Controllers\Controller; 
    use Illuminate\Http\Request; 
    use App\Models\Post; 
    use App\Models\Category;
    use App\Models\Tag;
    
    class PostController extends Controller 
    { 
    	public function index() 
    	{
    		return view('admin.posts.index');
    	} 
    	
    	public function create() 
    	{
    		$categories = Category::pluck('name', 'id');
    		$tags = Tag::all();
    	
    		return view('admin.posts.create', compact('categories', 'tags'));
    	} 
    	
    	public function store(Request $request) {} 
    	public function show(Post $post) {} 
    	public function edit(Post $post) {} 
    	public function update(Request $request, Post $post) {} 
    	public function destroy(Post $post) {} 
    }

     

  • Walter

    Walter hace 1 año

    ? 2° Configuración de la vista create.blade.php

    @extends('adminlte::page')
    
    @section('title', 'Coders Free')
    
    @section('content_header')
    	<h1>Crear nuevo post</h1>
    @stop
    
    @section('content')
    <div class="card">
    	<div class="card-body">
    		{!! Form::open([
    			'route' => 'admin.posts.store',
    			'autocomplete' => 'off'
    		]) !!}
    		
    			{!! Form::hidden('user_id', auth()->user()->id) !!}
    
    			<div class="form-group">
    				{!! Form::label('name', 'Nombre:') !!}
    				{!! Form::text('name', null, [
    					'class' => 'form-control',
    					'placeholder' => 'Ingrese el nombre del post'
    				]) !!}
    
    				@error('name')
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    
    			<div class="form-group">
    				{!! Form::label('slug', 'Slug') !!}
    				{!! Form::text('slug', null, [
    					'class' => 'form-control disabled',
    					'placeholder' => 'Ingrese el slug del post',
    					'readonly'
    				]) !!}
    
    				@error('slug')
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    
    			<div class="form-group">
    				{!! Form::label('category_id', 'Categoría') !!}
    				{!! Form::select('category_id', $categories, null, [
    					'class' => 'form-control'
    				]) !!}
    				
    				@error('category_id')
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    			
    			<div class="form-group">
    				<p class="font-weight-bold">Etiquetas</p>
    				@foreach ($tags as $tag)
    					<label class="mr-2">
    						{!! Form::checkbox('tags[]', $tag->id, null) !!}
    						{{ $tag->name }}
    					</label>
    				@endforeach
    				
    				@error('tags')
    					<br>
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    			
    			<div class="form-group">
    				<p class="font-weight-bold">Estado</p>
    				<label>
    					{!! Form::radio('status', 1, true) !!}
    					Borrador
    				</label>
    				<label>
    					{!! Form::radio('status', 2) !!}
    					Publicado
    				</label>
    				
    				@error('status')
    					<br>
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>			
    			
    			<div class="form-group">
    				{!! Form::label('extract', 'Extracto:') !!}
    				{!! Form::textarea('extract', null, [
    					'class' => 'form-control'
    				]) !!}
    				
    				@error('extract')
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    			
    			<div class="form-group">
    				{!! Form::label('body', 'Cuerpo del post:') !!}
    				{!! Form::textarea('body', null, [
    					'class' => 'form-control'
    				]) !!}
    				
    				@error('body')
    					<small class="text-danger">{{ $message }}</small>
    				@enderror
    			</div>
    
    			{!! Form::submit('Crear post', [
    				'class'=>'btn btn-primary'
    			]) !!}
    
    		{!! Form::close() !!}
    	</div>
    </div>
    @stop
    
    @section('css')
    	<link rel="stylesheet" href="/css/admin_custom.css">
    @stop
    
    @section('js')
    <script src="{{ asset('vendor/jq-sts-1.3/jquery.stringToSlug.min.js') }}">
    <script>
    	$(document).ready( function() {
    		$("#name").stringToSlug({
    			setEvents: 'keyup keydown blur',
    			getPut: '#slug',
    			space: '-'
    		});
    	});
    </script>
    @endsection

     

  • Walter

    Walter hace 1 año

    ? 1° Actualización de la vista del listado de posts

     

    Editamos el archivo /resources/views/admin/posts/index.blade.php:

    @extends('adminlte::page')
    
    @section('title', 'Coders Free')
    
    @section('content_header')
    	<a class="btn btn-secondary btn-sm float-right" 
    		href="{{ route('admin.posts.create') }}">Nuevo post</a>
    	<h1>Listado de Posts</h1>
    @stop
    
    @section('content')
    	@livewire('admin.posts-index')
    @stop
    
    @section('css')
    	<link rel="stylesheet" href="/css/admin_custom.css">
    @stop
    
    @section('js')
    	<script> console.log('Hi!'); </script>
    @stop