No tienes acceso a esta clase

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

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Creando un formulario

7/37
Recursos

Aportes 99

Preguntas 16

Ordenar por:

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

Otra alternativa para cuando utilizamos la funcion validate.

$request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8',
        ]);

Podemos poner todas las validaciones solo con que se separen con un " | ".

Reto completado

Muchas gracias, excelente clase…🚀

 

Traducción de los mensajes explicada en el vídeo del canal de Italo
https://www.youtube.com/watch?v=wPW8wXL2pm0&list=PLhCiuvlix-rTH5idwru7vKkPAmVODYJJB&index=13
 

Un pequeño resumen
 

  • Ir a config modificar app.php cambiando ** ‘locale’ => ‘en’ por ‘locale’ => ‘es’,
     
  • ir a resources
     
    Crear subcarpeta es y crear archivo validation.php con mensajes en español.
     
  • Al final del archivo validation.php
     
    Agregar:
    ‘attributes’ => [
    ‘name’ => ‘nombre’,
    ‘email’ => ‘correo electrónico’,
    'password ’ => ‘Contraseña’
    ],
     
    Para que aparezca una descripción diciente sobre cada uno de nuestros campos.

Para los que le quedaron vertical. Creo que poniendo

<div class="form-row" style="display: flex;">

En la en div superior al div que contiene col-sm-3 se puede lograr en algo ponerlo vertical.

![](

Una alternativa para obtener los errores de forma separada.

 <div class="col-sm-3">
        <input type="text" class="form-control" name="name" id="name" placeholder="Nombre" value="{{ old('name') }}">
         @error('name')
                  <div class="alert alert-danger" role="alert">
                         {{ $message }}
                    </div>
         @enderror
</div>               

@csrf hace referencia a Cross-site request forgery, un tipo de ataque malicioso que se hace a sitios web.

Creando un formulario


Cuando trabajamos con Laravel no interactuamos colocando código SQL, lo hacemos a través de un archivo ya preparado que representara a la tabla que queramos llamar.

// Esto le dice a Laravel que el formulario es nuestro.
@csrf
  • bcrypt() → Es un método helper de Laravel que encripta contraseñas.

Nunca pensé que usar laravel seria tan fácil, lo que me tardo haciendo en php puro con laravel se lo hace con unas cuantas lineas de código y en muy poco tiempo.

Me funciono con laravel 8.12

Vista

<div class="card mb-5">
    <div class="card-header">Agregar usuario</div>
    <div class="card-body">
        @if($errors->any())
            <div class="alert alert-danger" role="alert">
                @foreach ($errors->all() as $error)
                    - {{ $error }} <br />
                @endforeach
            </div>
        @endif
        <form action="{{ route('users.store') }}" method="POST">
            <div class="form-group row">
                <div class="input-group mb-3 col-sm-12 col-md-6">
                    <span class="input-group-text" id="name"><i class="far fa-user"></i></span>
                    <input name="name" id="name" type="text" class="form-control" value="{{ old('name') }}" placeholder="Usuario" aria-label="Usuario" aria-describedby="name">
                    @error('name')
                        <div class="alert alert-danger" role="alert">
                            {{ $message }}
                        </div>
                    @enderror
                </div>
                <div class="input-group mb-3 col-sm-12 col-md-6">
                    <span class="input-group-text" id="email"><i class="far fa-envelope"></i></span>
                    <input name="email" id="email" type="email" class="form-control" value="{{ old('email') }}" placeholder="Correo" aria-label="Correo" aria-describedby="email">
                    @error('email')
                        <div class="alert alert-danger" role="alert">
                            {{ $message }}
                        </div>
                    @enderror
                </div>
                <div class="input-group mb-3 col-sm-12 col-md-6">
                    <span class="input-group-text" id="password"><i class="fas fa-lock"></i></span>
                    <input name="password" id="password" type="password" class="form-control" placeholder="Contraseña" aria-label="Contraseña" aria-describedby="password">
                    @error('password')
                        <div class="alert alert-danger" role="alert">
                            {{ $message }}
                        </div>
                    @enderror
                </div>
                <div class="col-auto">
                    @csrf
                    <button id="store" name="store" type="submit" class="btn btn-primary">Registrar</button>
                </div>
            </div>
        </form>
    </div>
</div>

Controlador

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8',
        ]);
        User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        return back();
    }

Ruta

Route::post('users', [UserController::class, 'store'])->name('users.store');

Una opción para validar datos es el uso de Form Requests, de esa manera los controladores se mantienen limpios.

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', 'UserController@index');
Route::post('/users', 'UserController@store')->name("users.store");
Route::delete('/users/{user}', 'UserController@destroy')->name("users.destroy");

Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        $users = User::latest()->get();
        return view('users.index', [
            'users' => $users
        ]);
    }

    public function store(Request $request)
    {
        $request->validate(
            [
                'name' => 'required',
                'email' => ['required', 'email', 'unique:users'],
                'password' => ['required', 'min:8']
            ]
        );

        User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password)
        ]);

        return back();
    }

    public function destroy(User $user)
    {
        $user->delete();

        return back();
    }
}

views/users/index.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <title>Laravel</title>

  <!-- Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-sm-8 mx-auto">
        <div class="card border-0 shadow">
          <div class="card-body">
            @if($errors->any())
            <div class="alert alert-danger">
              @foreach($errors->all() as $error)
              - {{ $error }} <br />
              @endforeach
            </div>
            @endif

            <form action="{{ route('users.store') }}" method="POST">
              <div class="form-row">
                <div class="col-sm-3">
                  <input type="text" name="name" class="form-control" placeholder="Nombre" value="{{ old('name') }}">
                </div>
                <div class="col-sm-4">
                  <input type="email" name="email" class="form-control" placeholder="Email" value="{{ old('email') }}">
                </div>
                <div class="col-sm-3">
                  <input type="password" name="password" class="form-control" placeholder="Contraseña">
                </div>
                <div class="col-auto">
                  @csrf
                  <button type="submit" class="btn btn-primary">Enviar</button>
                </div>
              </div>
            </form>
          </div>
        </div>

        <table class="table">
          <thead>
            <tr>
              <th>Id</th>
              <th>Nombre</th>
              <th>Email</th>
              <th>&nbsp;</th>
            </tr>
          </thead>
          <tbody>
            @foreach($users as $user)
            <tr>
              <td>{{ $user->id }}</td>
              <td>{{ $user->name }}</td>
              <td>{{ $user->email }}</td>
              <td>
                <form action="{{ route('users.destroy', $user) }}" method="POST">
                  @method('DELETE')
                  @csrf
                  <input type="submit" value="Eliminar" class="btn btn-sm btn-danger" onclick="return confirm('¿Desea Eliminar...? ')" />
                </form>
              </td>
            </tr>
            @endforeach
          </tbody>
        </table>
      </div>
    </div>
  </div>
</body>

</html>

Result

Excelente profesor Italo, la forma como transmite la información.
El ritmo de trabajo , permite reflexionar sobre lo que se va codificando.
La forma en que enfatiza sobre las estructuras del código nos deja buenas bases. que permitirán “correr” mas adelante.!

Estoy muy contento con el cuidado y calidad que se percibe hasta el momento en este curso.

Gracias! Seguimos con toda!
😃

Tengo un problema me salen los campos en vertical![](

Con boostrap 5 cambian las clases, a ca las dejo

                    <form action="{{ route('users.store') }}" method="post">
                        <div class="row">
                            <div class="col-3">
                                <input type="text" name="name" class="form-control" placeholder="Ingrese el nombre">
                            </div>
                            <div class="col-4">
                                <input type="text" name="email" class="form-control" placeholder="Ingrese el email">
                            </div>
                            <div class="col-3">
                                <input type="password" name="password" class="form-control" placeholder="Ingrese el password">
                            </div>
                            <div class="col-auto">
                                @csrf
                                <input type="submit" value="Enviar" class="btn btn-primary">
                            </div>
                        </div>
                    </form>```

Sin palabras!!!
Extraordinario!!!
Excelente explicaciones!!

¿El helper @csrf siempre va en donde haya un botón, o puede ir en cualquier parte siempre y cuando este dentro del form?

Mis avances
![](

Siiiii…lo logre 😄!

Espere mucho para decir esto “Mi Primer crud con Laravel”

Listo Reto terminado, para realizar las traducciones de los mensajes de error de ingles a español, pueden consultar el siguiente enlace

https://github.com/Laraveles/spanish

Para los que les queda el formulario vertifal, solo es modificar el form-row por row y ya les queda horizontal.

Diosss!! Me está encantando este Framework y eso que estas clases son 2 versiones atras del actual.

Un regex para que valide los nombres invalidos:

$request->validate([
            'name' => ['required','regex:/(^([a-zA-Z]+)(\d+)?$)/u'],
            'email' => ['required', 'email', 'unique:users'],
            'password' => ['required', 'min:8', 'unique:users'],

        ]);```

Siempre que se vayan a guardar contraseñas y datos sensibles que solo el usuario sabe se deben encriptar, el helper brcypt() es muy útil para eso:D! Me sorprende lo rápido que logramos construir un sistema así de avanzado usando únicamente Bootstrap y Laravel

Yo le hacía a la vez jejeje, muchas gracias he entendido muchísimo con este curso acerca de Laravel

<div class="card">
  <form action="{{ route('users.store') }}" method="POST">

    <div class="form-row">
      <div class="col-sm-3">
        <input type="text" name="name" class="form-control" placeholder="Nombre">
      </div>
      <div class="col-sm-4">
        <input type="email" name="email" class="form-control" placeholder="Email">
      </div>
      <div class="col-sm-3">
        <input type="password" name="password" class="form-control" placeholder="Contraseña">
      </div>
      <div class="col-auto">
        @csrf
        <button type="submit" class="btn btn-primary">Enviar</button>
      </div>
    </div>
  </form>
</div>

AYUDAAAA! Necesito de su ayuda, de un momento a otro se dejaron de reflejar mis cambios en laravel, cualquier modificación que yo haga no se refleja, he creado mi formulario de registro de usuarios y no aparece, ya reinicie el servidor, limpie el cache pero sigue sin aparecer, lo mas extraño que si elimino a los usuarios y si funciona, y no me muestra ningún error, por ejemplo edite los nombres de las tablas y no se muestra dicha modificación, ya intente en varios navegadores que puede ser??? Ayudaaaaaaaaa!!

Reto realizado…

https://www.inc.cl/blog/otro/bcrypt
He utilzado bcrypt pero no NODE, aqui mas informacion ✌

Reto realizado, lista de usuarios…


Listo Reto Terminado con las validaciones en español. Gracias Italo a tus aportes.

Yo cuando valido suelo usarlo así:

 // creamos un usuario
        $datosValidado = $request->validate([
            'name' =>  ['required'],
            'email' => ['required', 'email'],
            'password' => ['required', 'min:5']     
        ]);

        if ($datosValidado->fails()) {
            $errors = $datosValidado->errors();
            # retorno error 400..
            return $this->errorResponse($errors, 400);
        }

        User::create([
            'name' => $request->name,
            'email' =>$request->email,
            'password' =>$request->password,
        ]);

Saludos.

░░░░░░░░░░░▄▄
░░░░░░░░░░█░░█
░░░░░░░░░░█░░█
░░░░░░░░░█░░░█
░░░░░░░░█░░░░█
██████▄▄█░░░░░██████▄
▓▓▓▓▓█░░░░░░░░░░░░░░█
▓▓▓▓▓█░░░░░░░░░░░░░░█
▓▓▓▓▓█░░░░░░░░░░░░░░█
▓▓▓▓▓█░░░░░░░░░░░░░░█
▓▓▓▓▓█░░░░░░░░░░░░░░█
▓▓▓▓▓█████░░░░░░░░░█
█████▀░░░░▀▀██████▀

Excelente clase magistral

excelente clase, como se aria para colocar las validaciones español

En caso de no poder mostrar los campos en fila por la actualización de Bootstrap, pueden reemplazar

class="form-row"

por solo

class="row"

Si, realmente fue muy facil, hacer un CRUD con Laravel.
Aqui lo dificil es el diseno 😒

Ejercicio


Para validar formularios tambien se puede hacer uso de “Form Request Validation”.

Link: https://laravel.com/docs/9.x/validation#quick-displaying-the-validation-errors

Oficialmente me acabo de enamorar de Laravel, no hay que hacer una gran validacion de los campos, tampoco hay que hacer mucha configuracion para mostrar un error en pantalla, es increible y el profesor explica de una forma muy detallada y directa.

Instalar paquete de idioma
composer require laraveles/spanish

php artisan laraveles:install-lang

‘locale’ => ‘es’,

En visual studio code pueden utilizar el simbolo punto “.” después del elemento html que quieran y después el nombre de la clase, por ejemplo para crear un div con la clase container sería div.container.

Una Alternativa Para Hashear Password es la siguiente

 'password' => Hash::make($request->password)

no olviden importar la clase

Reporte cumplido:

Me sorprende la facilidad de Laravel.

Tambien existe esta alternativa en el mismo controlador , requerir los campos y a su vez personalizar los mensajes

ublic function store(Request $request){


        //use Illuminate\Support\Facades\Hash;

        $request->validate([
            'nombre' => 'required',
            'apellido' => 'required',
            'cedula' => 'required',
            'telefono' => 'required',
            'celular' => 'required',
            'direccion' => 'required',
            'rol_id' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'foto' => 'required',
        ],[
            'nombre.required' => 'El nombre del usuario es requerido',
            'apellido.required' => 'El apellido es requerido',
            'cedula.required' => 'La cedula es requerida',
            'telefono.required' => 'El télefono es requerido',
            'celular.required' => 'El celular es requerido',
            'direccion.required' => 'La dirección es requerida',
            'rol_id.required' => 'El rol es requerido',
            'email.required' => 'El email es requerido',
            'email.email' => 'El email es no tiene el formato correcto',
            'password.required' => 'Contraseña requerida',
        ]

    );

Encriptar contraseña

Recordar las variables al grabar

Validación de formulario

Para agregar validación a un formulario esta se hace directamente en el controlador.

La validación se hace mediante el método validate del objeto Request, solo hay que agregar las condiciones que sean necesarias.

$request->validate([
    'name' => 'required|string|max:255',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
]);

De esta forma el formulario ya no insertará campos inválidos, pero hay que dar feedback al usuario usando un if en la plantilla, en las plantillas la variable errors contendrá todos los errores de validación.

@if($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Para que el formulario no borre los campos que fueron llenados correctamente hay que hacer uso del helper old de Laravel en los input, en su atributo value.

<input 
	type="text" 
	name="name" 
	class="form-control" 
	placeholder="Name"
	value="{{ old('name') }}"
>
                            <form action="{{ route('users.store')}}" method="POST">
                                <div class="form-row">
                                    <div class="col-sm-3">
                                        <input type="text" name="name" class="form-control" placeholder="Nombre" value="{{ old('name')}}">
                                    </div>
                                    <div class="col-sm-3">
                                        <input type="text" name="email" class="form-control" placeholder="Email" value="{{ old('email')}}">
                                    </div>
                                    <div class="col-sm-3">
                                        <input type="password" name="password" class="form-control" placeholder="Contraseña" value="{{ old('password')}}">
                                    </div>
                                    <div class="col-auto">
                                        @csrf
                                        <button type="submit" class="btn btn-primary">Enviar</button>
                                    </div>
                                </div>
                            </form>

Pude hacer todo paso a paso y las validaciones son muy buenas, la creación de un crud es mas sencilla de los que venia haciendo, tuve un pequeño inoconveniete y es que los input se corrieron una linea abajo.

Por si les quedó el formulario vertical agreguen la clase de display flex

 <div class="form-row d-flex">

Bastante bien explicado, cabe destacar que yo usé la versión 7 de Laravel para evitar algunos errores.

Todo bien hasta el momento!

También podemos validar con expresiones regulares, es mi favorito: https://laravel.com/docs/8.x/validation#rule-regex

Es excelente hasta el momento lo que nos enseñan con laravel, todo es mucho mas simplificado y rápido, justo como lo comentaban en las clases anteriores.

Reto completado :

HOLA TENGO UN DETALLE EN EL FORMULARIO, NO ME AGREGA EL NUEVO USUARIO A LA BD NI SE REFLEJA EN EL LISTADO, ¿QUÉ PODRÍA SER? TAMPOCO PUEDO ELIMINAR EL USUARIO, SIGUE APARECIENDO

CÓDIGO FORMULARIO

<form action="{{ route('users.store') }}" method="POST">
                        <div class="form-row">
                            <div class="col-sm-3">
                                <input type="text" name="name" class="form-control" placeholder="Nombre">
                            </div>
                            <div class="col-sm-4">
                                <input type="text" name="email" class="form-control" placeholder="Email">
                            </div>
                            <div class="col-sm-3">
                                <input type="password" name="email" class="form-control" placeholder="Contraseña">
                            </div>
                            <div class="col-auto">
                                @csrf
                                <button type="submit" class="btn btn-primary">Enviar</button>
                            </div>
                        </div>
                    </form>```

CÓDIGO DONDE ELIMINO


<form action="{{ route (‘users.destroy’, $user) }}" method=“POST”>
@method(‘DELETE’)
@csrf
<input
type="submit"
value="Eliminar"
class="btn btn-sn btn-danger"
onclick=“return confirm(’¿Desea eliminar…?’)”>
</form>```

Controlador

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;


class UserController extends Controller
{
    public function index()
    {
        // Consulto los datos
        $users = User::latest('id')->get();
        // Cargo la vista y paso los datos que tenemos en la variable $users
        return view('users.index', [
            'users' => $users
        ]);
    }

    // Método que se va a encargar de guardar los datos que le enviemos
    public function store(Request $request)
    {
        // Realizamos la validación de los campos
        $request->validate(
            [
                'name' => 'required',
                'email' => ['required', 'email', 'unique:users'],
                'password' => ['required', 'min:8'],
            ],
            [
                // Mensajes personalizados para los errores que estamos validando
                'name.required' => 'El campo nombre es requerido.',
                'email.required' => 'El campo email es requerido.',
                'email.unique' => 'El email ya existe.',
                'email.email' => 'El email no es válido.',
                'password.required' => 'El campo contraseña es requerido.',
                'password.min' => 'La contraseña debe tener mínimo 8 caracteres.',
            ]
        );

        User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        // Retorna a la vista anterior con un mensaje exitoso
        return redirect()->back()->with('success', 'El usuario fue registrado correctamente.');
    }

    public function destroy(User $user)
    {
        // Método de eliminar
        $user->delete();
        return back();
    }
}

Index

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Importamos bootstrap en el proyecto -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
    <title>Listado de Usuarios</title>
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="col-sm-10 mx-auto">
                <div class="card border-0 shadow mt-3">
                    <div class="card-body">
                        <h5 class="card-title mb-2">Registro de Usuarios</h5>
                        <form action="{{ route('users.store')}}" method="POST">
                            <div class="form-row mx-auto">
                                <div class="col-sm-3">
                                    <input type="text" name="name" class="form-control" placeholder="Introduce el nombre" value="{{ old('name') }}">
                                </div>
                                <div class="col-sm-4">
                                    <input type="text" name="email" class="form-control" placeholder="Introduce el email" value="{{ old('email') }}">
                                </div>
                                <div class="col-sm-3">
                                    <input type="password" name="password" class="form-control" placeholder="Introduce la contraseña" value="{{ old('password') }}">
                                </div>
                                <div class="col-auto">
                                    @csrf
                                    <input type="submit" value="Guardar" class="btn btn-primary">
                                </div>
                            </div>
                        </form>
                        @if (session()->has('success'))
                        <div class="alert alert-success mt-3 mb-0" role="alert">
                            <span>{{ session('success') }}</span>
                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        @endif

                        @if($errors->any())
                        <div class="alert alert-danger mt-3 mb-0" role="alert">
                            @foreach($errors->all() as $error)
                            - {{ $error }}
                            <br>
                            @endforeach
                        </div>
                        @endif
                    </div>
                </div>

                <div class="card border-0 shadow mt-3">
                    <div class="card-body">
                        <h5 class="card-title">Listado de Usuarios</h5>
                        <table class="table">
                            <thead class="thead-light">
                                <th>ID</th>
                                <th>Nombre</th>
                                <th>Email</th>
                                <th></th>
                            </thead>
                            <tbody>
                                @foreach($users as $user)
                                <tr>
                                    <td>{{$user->id}}</td>
                                    <td>{{$user->name}}</td>
                                    <td>{{$user->email}}</td>
                                    <td>
                                        <form action="{{ route('users.destroy',$user)}}" method="POST">
                                            @method('DELETE')
                                            @csrf
                                            <input type="submit" value="Eliminar" class="btn btn-sm btn-danger" onclick="return confirm('¿Desea eliminar el usuario {{$user->name}} ?')">
                                        </form>
                                    </td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>

</html>

Resultado

Captura de Errores

Registro de usuario exitoso

Reto completado!

public function store(Request $request){

        $request->validate([
             'name'=>'required'
            ,'email'=>['required', 'email' , 'unique:users']
            ,'password'=>['required' , 'min:6']
        ]);
        User::create([
            'name'=>$request->name
            ,'email'=>$request->email
            ,'password'=>bcrypt($request->password)
        ]);

        return back();
    }

Buen curso, con unos pocos videos he aprendido mucho y vamos por mas!

Se puede encriptar directo con PHP con password_hash
https://www.php.net/manual/es/function.password-hash.php
y podemos verificarla con password_verify
https://www.php.net/manual/es/function.password-verify.php

por que con php artisan serve no me cargan los archivos css, pero por medio de xampp si , gracias

Muy clara la explicación de la implementación de CRUD, realmente Laravel facilita mucho el desarrollo web.

Muy bueno el curso simple y claro

Excelente clase!

MUY BUEN CURSO !! MUY CLARAS LAS EXPLICACIONES !

Reto realizado![](

Wao!!

Genial…

Por alguna razón el bcrypt no me funcionó, use el siguiente:
Hash::make($request->password)

Directo y conciso… Excelente!

No conocia el uso de tinker, en las migraciones de versiones siempre lo actualizaba, pero no sabia para que era.
Muchas Gracias, buen dato.

Excelente docente, que clase tan completa

excelente clase y excelente profesor.

Done!

Me quedo de esta forma.

En el caso que se encuentre utilizando la version 8 de Laravel, tambien en el archivo UserController.php en el metodo store se puede utilizar lo siguiente:

public function store(Request $request) { User::insert([ "name" => $request->name, "email" => $request->email, "password" => $request->password, ]); return back(); }

Se utiliza el metodo insert para ingresar nuevos datos.

Espero que sea de su ayuda.

A la hora de enviar los datos del nuevo usuario me salta lo siguiente:
SQLSTATE[HY000]: General error: 1364 Field ‘password’ doesn’t have a default value (SQL: insert into users (name, email, updated_at, created_at) values (luchiano, [email protected], 2020-09-20 18:43:43, 2020-09-20 18:43:43))

excelente la forma de hacer un crud, aunque si cambia la version 8 de laravel

Otra forma de usar las validaciones (validate) es creando un Request especifico para el controlador con el comando:
‘php artisan make:request NombreRequest’

Posteriormente cambiamos el Request de la funcion en el controlador por este, dicho NombreRequest se encontrara en App\Http\Request.

Abrimos este archivo y ponemos las reglas de validacion en el array que esta en la funcion “rules()”, si queremos que la peticion solo sea valida para usuarios con sesion iniciada cambiamos lo que esta en la funcion authorize() arriba de rules() de false a true.

Un ejemplo seria este

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest 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 [
            'name' => ['string','required','max:50'],
        ];
    }
}
@if(isset($errors))
      <div class="alert alert-danger">
              @foreach($errors->all() as $error)
                  -- {{$error}} <br>
               @endforeach
       </div>
@endif()

@if(isset($errors))
                        <div class="alert alert-danger">
                            @foreach($errors->all() as $error)
                                -- {{$error}} <br>
                            @endforeach
                        </div>
                    @endif()```

Para los que quieran personalizar sus mensajes de error, les comparto una forma de hacerlo.

$request->validate([
                'name' => 'required',
                'email' => 'required|email|unique:users',
                'password' => 'required|min:8'
            ],
            $messages = [
                'required' => 'El :attribute  es requerido',
                'unique' => 'El :attribute debe ser único',
                'min' => ':attribute debe ser de :min caracteres mínimo',
            ]
        );

Cumpliendo:

Creo que va muy zarpado noc

Nice!!!

<div class="card border-0 shadow">
                       <div class="card-body alert-info">
                           @if($errors->any())
                            <div class="alert alert-danger">
                                @foreach ($errors->all() as $error)
                                    - {{ $error }} <br>
                                @endforeach
                            </div>
                           @endif
                            <form action="{{ route('users.store') }}" method="POST">
                                <div class="form-row">
                                    <div class="col-sm-3">
                                        <input type="text" name="name" class="form-control" placeholder="Nombre" value="{{ old('name') }}" >
                                    </div>
                                    <div class="col-sm-4">
                                        <input type="email" name="email" class="form-control" placeholder="Email" value="{{ old('email') }}" >
                                    </div>
                                    <div class="col-sm-3">
                                        <input type="password" name="password" class="form-control" placeholder="Contraseña">
                                    </div>
                                    <div class="col-auto">
                                        @csrf
                                        <button type="submit" class="btn btn-primary">Enviar</button>
                                    </div>
                                </div>
                            </form>
                       </div>

Actualmente, la mejor manera (en mi opinion) y “a lo laravel” de hashear el password para guardarlo en la DB seria:

use Illuminate\Support\Facades\Hash;

$password_hash = Hash::make($request->password);

Hola, estoy usando laragon como servidor, sin embargo este funciona con laravel 4
Puede traer problemas si quiero subir algún proyecto a un hosting ??

una forma de poner mensajes personalizados, a esto llamo una interfaz amigable

public function store(Request $request)
    {
    	$messages = [
    		'name.required' => 'El nombre es un campo obligatorio por favor capturelo imbécil',
    		'email.required' => 'El correo es necesario si no lo capturas como ¿diantres vamos a validar?',
    		'password.required' => 'El password es un campo obligatrio como ¿demonios vamos a acceder después sin uno?'
    	];
    	$rules = [
    		'name' => ['required'],
    		'email' => ['required', 'email', 'unique:users'],
    		'password' => ['required', 'min:8']
    	];

    	$this->validate($request, $rules, $messages);

    	User::create([
    		'name' => $request->name,
    		'email' => $request->email,
    		'password' => $request->password
    	]);

    	return back();
    }```

Reto completado

Utilizar composer require laravel-lang/lang:~7.0 sale muy bien

Alguien sabe como solucionar este error

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
El método GET no es compatible con esta ruta. Métodos admitidos: POST.