ccc

Mostrando entradas con la etiqueta Laravel Formularios. Mostrar todas las entradas
Mostrando entradas con la etiqueta Laravel Formularios. Mostrar todas las entradas

Formularios utizando modelos

En la consola crear un modelo:
php artisan make:model Pelicula -m

En database/migrations se ha creado el fichero crear_peliculas_table_xxx.php que modif:

public function up()
    {
        Schema::create('peliculas', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('titulo');
            $table->string('anno');
            $table->string('director');
            $table->timestamps();
        });
    }

En consola ejecutamos para crear esa tabla en la BD:
php artisan migrate

En App te ha creado el modelo Pelicula.php que modificamos:
protected $table = 'peliculas';
protected $fillable = ['titulo', 'anno', 'director'];
protected $guarded = ['id'];

En Routes/web.php creamos las rutas:
Route::get('pelicula/add_pelicula','PeliculaController@add_pelicula');
Route::get('pelicula/list_peliculas','PeliculaController@list_peliculas');
Route::resource('pelicula/guardar','PeliculaController@guardar');

Creamos desde consola el controlador:
php artisan make:controller PeliculaController

En App/Http/Controllers/PeliculaController modificamos:
use Illuminate\Http\Request;
use App\Pelicula as Pelicula;

class PeliculaController extends Controller
{
    public function index(){
        $peliculas = Pelicula::all();
        return \View::make('list_peliculas',compact('peliculas'));
    }

    public function add_pelicula() {
        // return \View::make('add_pelicula');
        return view('add_pelicula');
    }

    public function list_peliculas() {
        $peliculas = Pelicula::all();
        return \View::make('list_peliculas',compact('peliculas'));
    }

    public function guardar(Request $request)  {
        $pelicula = new Pelicula;
        $pelicula->create($request->all());
        return redirect('pelicula/list_peliculas');
    }
}

Creamos la vista standard de app.blade.php por si no está ya creada de antes:
<html>
<head>
    @section('head')
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    @show
</head>
<body>
<div class="container">
    @yield('content')
</div>

@section('footer_scripts')
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
@show
</body>
</html>

Creamos la vista de add_pelicula.blade.php:
@extends('app')
@section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-10 col-md-offset-1">
                <form action="{{url('pelicula/guardar')}}" method="post">
                    {{ csrf_field() }}
                    Título: <input type="text" name="titulo"><br>
                    Año: <input type="text" name="anno"><br>
                    Director:<input type="text" name="director"><br>
                    <input type="submit">
                </form>
            </div>
        </div>
    </div>
@endsection

Creamos la vista de list_peliculas.blade.php:
@extends('app')
@section('content')
    <div class="container">
        <div class="row">
            <a href="{{ url('pelicula/add_pelicula') }}" class="btn btn-primary">Añadir nueva película</a>
            <hr>
            <table class="table table-condensed table-striped table-bordered">
                <thead>
                <tr>
                    <th>Título</th>
                    <th>Año</th>
                    <th>Director</th>
                </tr>
                </thead>
                <tbody>
                @foreach($peliculas as $item)
                    <tr>
                        <td>{{ $item->titulo }}</td>
                        <td>{{ $item->anno }}</td>
                        <td>{{ $item->director }}</td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    </div>
@endsection

Laravel: Formularios

En routes/web.php:
Route::get('insert','ClientesInsertController@insertform');
Route::post('create','ClientesInsertController@insert');

Ejecutar desde la consola:
php artisan make:controller ClientesInsertController

En app/Http/Controllers/ClientesInsertController.php:
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Validator;

class ClientesInsertController extends Controller
{
    public function insertform(){
        return view('clientes_create');
    }

    public function insert(Request $request){
        $validator = Validator::make($request->all(), [
            'nombre_cliente' => 'required',
        ]);


        if ($validator->fails()) {
            return redirect('insert')
                ->withErrors($validator)
                ->withInput();
        }

        $nombre_cliente = $request->input('nombre_cliente');
        DB::insert('insert into clientes (nombre_cliente) values(?)',[$nombre_cliente]);
        echo "Dado de alta correctamente<br/>";
        echo '<a href = "./insert">Pulsa aquí</a> para añadir otro';
    }
}

Crear la vista resources/views/clientes_create.blade.php:
<form action = "./create" method = "post">
    <input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">

    <table>
        <tr>
            <td>Nombre</td>
            <td><input type='text' name='nombre_cliente' /></td>
        </tr>
        <tr>
            <td colspan = '2'>
                <input type = 'submit' value = "Dar alta cliente"/>
            </td>
        </tr>
        <tr><td>
                @if (count($errors) > 0)
                    <div class="alert alert-danger">
                        <ul>
                            @foreach ($errors->all() as $error)
                                <li>{{ $error }}</li>
                            @endforeach
                        </ul>
                    </div>
                @endif
            </td></tr>
    </table>

</form>