Commit 9d3a625a by Angello Torres

Vídeo 33 parte 2

parent ba471490
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PHPUnit">
<option name="directories">
<list>
<option value="$PROJECT_DIR$/tests/Unit" />
<option value="$PROJECT_DIR$/tests/Feature" />
</list>
</option>
</component>
</project>
\ No newline at end of file
{
"ExpandedNodes": [
"",
"\\app",
"\\database",
"\\database\\factories",
"\\database\\seeds",
"\\public"
],
"SelectedNode": "\\app\\User.php",
"PreviewInSolutionExplorer": false
}
\ No newline at end of file
...@@ -57,6 +57,64 @@ class UserController extends Controller ...@@ -57,6 +57,64 @@ class UserController extends Controller
public function create() public function create()
{ {
return view('create'); return view('users.create');
}
public function store(){
// recibe los campos del formulario y crea un usuario nuevo
// $data = request()->all(); // recoge todos los campos son validar nada
/*
* Con los datos validados, el método validate() recibe un array asociativo con todas las validaciones,
* se puede mandar otro array con los mensajes que se quieran mostar, donde las llaves son los nombres de los
* campos.nombreValidación (name.required) y los valores son los mensajes
*/
$data = request()->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email', // Con | puedes tener más de una regla, o pasando un array ['required', 'email', '...']
'password' => ['required','min:6'],
], [
'name.required' => 'El campo "Nombre del usuario" es requerido',
'email.required' => 'El campo "Email" es requerido',
'email.unique' => 'Otro usuario stá usando el email, este debe ser único',
'password.required' => 'El campo "Tu password" es requerido',
'password.min' => 'El campo "Tu password" debe tener al menos 6 caracteres',
]);
User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
return redirect()->route('users.index');
// return 'Procesando información ...';
}
public function edit(User $user)
{
return view('users.edit', ['user' => $user]);
}
public function update(User $user){
$data = request()->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email', // Con | puedes tener más de una regla, o pasando un array ['required', 'email', '...']
'password' => ['required','min:6'],
], [
'name.required' => 'El campo "Nombre del usuario" es requerido',
'email.required' => 'El campo "Email" es requerido',
'email.unique' => 'Otro usuario stá usando el email, este debe ser único',
'password.required' => 'El campo "Tu password" es requerido',
'password.min' => 'El campo "Tu password" debe tener al menos 6 caracteres',
]);
$data['password'] = bcrypt($data['password']);
$user->update($data);
return redirect()->route('user.show', ['user' => $user]);
} }
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -43,24 +43,15 @@ ...@@ -43,24 +43,15 @@
<div class="collapse navbar-collapse" id="navbarCollapse"> <div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto"> <ul class="navbar-nav mr-auto">
<li class="nav-item active"> <li class="nav-item active">
<a class="nav-link" href="{{ route('users.index') }}">Usuarios <span class="sr-only">(current)</span></a> <a class="nav-link" href="{{ route('users.index') }}">Usuarios Registrados<span class="sr-only">(current)</span></a>
</li> <!--
</ul>
<!--
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li> </li>
<li class="nav-item"> <li class="nav-item active">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a> <a class="nav-link" href="{{ route('users.store') }}">Nuevo Usuario<span class="sr-only">(current)</span></a>
</li> </li>
-->
</ul> </ul>
<!-- -->
<form class="form-inline mt-2 mt-md-0"> </ul>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
-->
</div> </div>
</nav> </nav>
</header> </header>
...@@ -88,7 +79,7 @@ ...@@ -88,7 +79,7 @@
<footer class="footer mt-auto py-3"> <footer class="footer mt-auto py-3">
<div class="container"> <div class="container">
<span class="text-muted">Place sticky footer content here.</span> <span class="text-muted">Turtorial de laravel</span>
</div> </div>
</footer> </footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1><?= e($title) ?></h1>
<hr>
@if (! empty($users))
<ul>
@foreach ($users as $user)
<li>{{ $user }}</li>
@endforeach
</ul>
@else
<p>No hay usuarios registrados</p>
@endif
</body>
</html>
@extends('layout')
@section('title', "Crear usuario")
@section('content')
<h1>Crear usuario</h1>
{{-- Saber si se tiene algún error enel formulario --}}
{{--
@if($errors->any())
<!-- La variable $errors toma TODOS los errores -->
<div class="alert alert-danger">
<p>Por favor corrige los siguiente errores:</p>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
--}}
<form action="{{route('users.store')}}" method="post">
{{--
Add _token (es un input type="hidden" que envia info que solo nuestro serve sabe) para evitar ataques de tipo CSRF
<input type="hidden" name="_token" value="F3hukPNtUeW02l3URoLgyM1pd4uQPWazQrSaXQ8h">
--}}
{{csrf_field()}}
{{--
Para desactivar el csrf_field() se debe ir a /app/Http/kernel.php
Por la línea 36 aprox. \App\Http\Middleware\VerifyCsrfToken::class
--}}
<div class="form-group">
<label for="name">Nombre del usuario: </label>
<input type="text" class="form-control" name="name" id="name" placeholder="Nombres apellidos" value="{{ old('name') }}">
@if($errors->any() && $errors->has('name')) {{-- Toma la variable $errors y mira si tiene un error en la clave 'name'--}}
<div class="alert alert-danger">
<p>{{ $errors->first('name') }}</p>
</div>
@endif
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" name="email" id="email" placeholder="usuario@example.com" value="{{ old('email') }}">
@if($errors->any() && $errors->has('email')) {{-- Toma la variable $errors y mira si tiene un error en la clave 'name'--}}
<div class="alert alert-danger">
<p>{{ $errors->first('email') }}</p>
</div>
@endif
</div>
<div class="form-group">
<label for="passwords">Tu password</label>
<input type="password" class="form-control" name="password" id="passwords" placeholder="Mayor a 6 caracteres">
@if($errors->any() && $errors->has('password')) {{-- Toma la variable $errors y mira si tiene un error en la clave 'name'--}}
<div class="alert alert-danger">
<p>{{ $errors->first('password') }}</p>
</div>
@endif
</div>
<button class="btn btn-primary" type="submit">Crear usuario</button>
</form>
<p>
<a href="{{ route('users.index') }}">Regresar al listado de usurios</a>
</p>
@endsection
@extends('layout')
@section('title', "Editar usuario")
@section('content')
<h1>Editar usuario</h1>
<form action="{{route('users.update')}}" method="post">
{{ method_field('PUT') }} {{-- Método de laravel, que permite realizar una llamada, por medio del formulario, al
método PUT --}}
{{csrf_field()}}
<div class="form-group">
<label for="name">Nombre del usuario: </label>
<input type="text" class="form-control" name="name" id="name" value="{{ old('name', $user->name) }}">
@if($errors->any() && $errors->has('name'))
<div class="alert alert-danger">
<p>{{ $errors->first('name') }}</p>
</div>
@endif
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" name="email" id="email" value="{{ old('email', $user->email) }}">
@if($errors->any() && $errors->has('email'))
<div class="alert alert-danger">
<p>{{ $errors->first('email') }}</p>
</div>
@endif
</div>
<div class="form-group">
<label for="passwords">Tu password</label>
<input type="password" class="form-control" name="password" id="passwords" placeholder="Mayor a 6 caracteres">
@if($errors->any() && $errors->has('password'))
<div class="alert alert-danger">
<p>{{ $errors->first('password') }}</p>
</div>
@endif
</div>
<button class="btn btn-primary" type="submit">Actualizar usuario</button>
</form>
<p>
<a href="{{ route('users.index') }}">Regresar al listado de usurios</a>
</p>
@endsection
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
con rutas (name), estas estan definidas en routes/web.php con rutas (name), estas estan definidas en routes/web.php
--> -->
<a href="{{ route('users.show', ['id' => $user->id]) }}">Ver detalle</a> <a href="{{ route('users.show', ['id' => $user->id]) }}">Ver detalle</a>
<a href="{{ route('users.edit', ['id' => $user->id]) }}">Actualizar usuario</a>
</li> </li>
@empty @empty
<p>No hay usuarios registrados</p> <p>No hay usuarios registrados</p>
......
@extends('layout') @extends('layout')
@section('title', "Usuario {$user->id}") @section('title', "Detalle usuario {$user->id}")
@section('content') @section('content')
<h1>Usuario #{{ $user->id }}</h1> <h1>Usuario #{{ $user->id }}</h1>
......
...@@ -20,11 +20,25 @@ Route::get('/', function () { ...@@ -20,11 +20,25 @@ Route::get('/', function () {
Route::get('/usuarios', 'UserController@index') Route::get('/usuarios', 'UserController@index')
->name('users.index'); ->name('users.index');
Route::get('/usuarios/detalle/{id}', 'UserController@show') Route::get('/usuarios/{id}', 'UserController@show')
->where('id', '[0-9]+') ->where('id', '[0-9]+')
->name('users.show'); ->name('users.show');
// Rutas par la creación de usuarios - Métodos get / post
/*
* get -> Solicitar y obtener información
* post -> Enviar y procesar información
*
*/
Route::get('/usuarios/nuevo', 'UserController@create') Route::get('/usuarios/nuevo', 'UserController@create')
->name('users.create'); ->name('users.create');
Route::post('/usuarios/crear', 'UserController@store')
->name('users.store');
Route::get('/saludo/{name}/{nickname?}', 'welcomeUserController'); Route::get('/saludo/{name}/{nickname?}', 'welcomeUserController');
// Ruta para la edición del usuario, carga los datos
Route::get('/usuarios/{user}/editar', 'UserController@edit')->name('users.edit');
// Ruta para la actualzación en DB de los datos
Route::put('/usuarios/{user}', 'UserController@update')->name('users.update');
...@@ -6,27 +6,63 @@ use Tests\TestCase; ...@@ -6,27 +6,63 @@ use Tests\TestCase;
class pruebaTest extends TestCase class pruebaTest extends TestCase
{ {
/** @test */
// /** @test */
/*
function usuariosTest() function usuariosTest()
{ {
$this->get('/usuarios') $this->get('/usuarios')
->assertStatus(200) ->assertStatus(200)
->assertSee('Listado de usuarios'); ->assertSee('Listado de usuarios');
} }
*/
/** @test */ // /** @test */
/*
function detalleUsuarioTest() function detalleUsuarioTest()
{ {
$this->get('/usuarios/52') $this->get('/usuarios/52')
->assertStatus(200) ->assertStatus(200)
->assertSee('Mostrado detalle del usuario: 5'); ->assertSee('Mostrado detalle del usuario: 5');
} }
*/
/** @test */ // /** @test */
/*
public function nuevoUsuarioTest() public function nuevoUsuarioTest()
{ {
$this->get('/usuarios/nuevo') $this->get('/usuarios/nuevo')
->assertStatus(200) ->assertStatus(200)
->assertSee('Crear nuevo usuario'); ->assertSee('Crear nuevo usuario');
} }
*/
/** @test */
function it_create_new_user(){
$this->post('/usuarios/', [
'name' => 'Duilio',
'email' => 'duilio@styde.net',
'password' => '123456',
]);// ->assertSee('Procesando información ...');
$this->assertDatabaseHas('users', [
'name' => 'Duilio Palacios',
'email' => 'duilio@sryde.net',
]);
}
/** @test */
function the_name_is_required(){
// $this->withoutExceptionHandling();
$this->post('usuarios', [
'email' => 'duilio@styde.net',
'password' => '123456',
]);//->assertRedirect('usuarios/nuevo')
//->assertSessionHasErrors(['name']);
$this->assertDatabaseMissing('users', [
'email'=> 'duilio@styde.net',
]);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment