- Mensajes: 46
- Gracias recibidas: 1
3. Laravel 8 con auth ui y VUE.js 3 - Formularios
- luispindola
- Autor del tema
- Fuera de línea
- Administrador
Menos
Más
2 años 2 meses antes - 2 años 2 meses antes #43
por luispindola
3. Laravel 8 con auth ui y VUE.js 3 - Formularios Publicado por luispindola
Este tema es continuación de:
Laravel 8 con auth ui y VUE.js 3 - Vue-RouterLaravel 8 con auth ui y VUE.js 3 - Vue-Router
1. Primero vamos a crear la tabla y modelo Libros:
migrate:
cretate_libros_table.php
app/Models/Libro.php
yo corremos las migraciones para que se cree la tabla:
php artisan migrate
2. como vamos a trabajar con un controlador tipo Api, vamos a crear un Resorce:
tecleamos en consola:
php artisan make:resource LibroResource
y de momento el código quedaría:
3. creamos el Request teclando en consola:
php artisan make:request LibroRequest
y agregamos el siguiente código:
4. Creamos el controlador Api/LibrosController tecleando en consola:
php artisan make:controller Api/LibrosController
y agregamos el siguiente código:
5. Creamos el archivo:
App/resources/js/libros.js
6. Por último modificamos el archivo CreaLibro.vue con lo siguiente:
7. Por último ejecutamos:
npm run dev
y al ejecutar el sitio nos debe mostrar funcional el formulario para crear nuevo:
De momento se puede verificar los datos guardados directamente en la base de datos, mas adelante publicaré como se consultan, editan y eliminan los registros para tener el CRUD completo.
8. Aquí comparto el link para descargar el proyecto laravel-vue como va hasta éste punto:
Parte del mensaje está oculto para usuarios no registrados. Por favor inicie sesión o regístrese para poder verlo.
1. Primero vamos a crear la tabla y modelo Libros:
migrate:
cretate_libros_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLibrosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('libros', function (Blueprint $table) {
$table->id();
$table->string('titulo');
$table->string('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('libros');
}
}
app/Models/Libro.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Libro extends Model
{
use HasFactory;
protected $table = 'libros';
protected $fillable = [
'titulo',
'descripcion',
];
}
yo corremos las migraciones para que se cree la tabla:
php artisan migrate
2. como vamos a trabajar con un controlador tipo Api, vamos a crear un Resorce:
tecleamos en consola:
php artisan make:resource LibroResource
y de momento el código quedaría:
3. creamos el Request teclando en consola:
php artisan make:request LibroRequest
y agregamos el siguiente código:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class LibroRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'titulo' => 'required',
'descripcion' => 'required'
];
}
}
4. Creamos el controlador Api/LibrosController tecleando en consola:
php artisan make:controller Api/LibrosController
y agregamos el siguiente código:
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\LibroRequest;
use App\Http\Resources\LibroResource;
use App\Models\Libro;
use Illuminate\Http\Request;
class LibrosController extends Controller
{
//
public function storeLibro (LibroRequest $request)
{
$libro = Libro::create($request->validated());
return new LibroResource($libro);
}
}
5. Creamos el archivo:
App/resources/js/libros.js
import { ref } from 'vue'
import { useRouter } from 'vue-router'
export default function useLibros(){
const errors = ref('')
const router = useRouter()
const libros = ref([])
const storeLibro = async (data) => {
console.log("Funcion para enviar data via post por axios")
errors.value = ''
try{
await axios.post('/api/libros/store',data)
await router.push({name: 'holamundo'})
} catch(e){
if(e.response.status === 422){
errors.value = e.response.data.errors
}
}
}
return {
libros,
errors,
storeLibro
}
}
6. Por último modificamos el archivo CreaLibro.vue con lo siguiente:
<template>
<div class="card">
<div class="card-header">{{ tituloform }}</div>
<div class="card-body">
<div id="formulario-persona">
<div v-if="errors">
<div v-for="(v, k) in errors" :key="k">
<p class="text-danger" v-for="error in v" :key="error">
{{ error }}
</p>
</div>
</div>
<form @submit.prevent="onSubmit">
<div class="form-group">
<label>Titulo</label>
<input type="text" v-model="form.titulo" class="form-control" />
</div>
<div class="form-group">
<label>Descripción</label>
<input type="text" v-model="form.descripcion" class="form-control" />
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<button type="submit" class="btn btn-primary" >Añadir libro</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</template>
<script>
import { reactive } from 'vue';
import { ref } from 'vue';
import useLibros from "../libros.js";
export default {
setup() {
const {errors, storeLibro} = useLibros()
const form = reactive({
titulo: '',
descripcion: ''
})
const tituloform = "Titulo de formulario"
const onSubmit = async()=> {
console.log("Recibida en funcion submit ("+form.titulo+")")
await storeLibro({...form})
}
return {
form,
tituloform,
onSubmit,
errors
}
}
}
</script>
<style scoped>
form {
margin-bottom: 2rem;
}
</style>
7. Por último ejecutamos:
npm run dev
y al ejecutar el sitio nos debe mostrar funcional el formulario para crear nuevo:
De momento se puede verificar los datos guardados directamente en la base de datos, mas adelante publicaré como se consultan, editan y eliminan los registros para tener el CRUD completo.
8. Aquí comparto el link para descargar el proyecto laravel-vue como va hasta éste punto:
Parte del mensaje está oculto para usuarios no registrados. Por favor inicie sesión o regístrese para poder verlo.
Adjuntos:
Última Edición: 2 años 2 meses antes por luispindola.
Por favor, Identificarse o Crear cuenta para unirse a la conversación.
Tiempo de carga de la página: 0.080 segundos