Commit 420ebfa2 by Angello Torres

Merge branch 'dev' of http://git.setisl.com/seti/git-testing into dev

# Conflicts:
#	Configuracion_vhost.txt
#	prueba/.idea/php.xml
#	prueba/.idea/prueba.iml
#	prueba/app/Http/Controllers/UserController.php
#	prueba/composer.lock
#	prueba/resources/views/layout.blade.php
#	prueba/resources/views/users/create.blade.php
#	prueba/resources/views/users/edit.blade.php
#	prueba/resources/views/users/index.blade.php
#	prueba/resources/views/users/show.blade.php
#	prueba/routes/web.php
#	prueba/tests/Feature/pruebaTest.php
parents e637b364 a63f0056
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\User; use App\User;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
class UserController extends Controller class UserController extends Controller
{ {
// Muestra el listado de todos los usuarios
public function index() public function index()
{ {
// Con listado dinámino, tomando datos desde la DB // Con listado dinámino, tomando datos desde la DB
...@@ -41,25 +42,32 @@ class UserController extends Controller ...@@ -41,25 +42,32 @@ class UserController extends Controller
return view('users.index', compact('title', 'users')); return view('users.index', compact('title', 'users'));
} }
/*
// Otra forma de para la función show
public function show($id) public function show($id)
{ {
// return view('users.show', compact('id'));
$user = User::find($id); $user = User::find($id);
// Condicional para evitar que el usuario busque un registro inexixtente Condicional para evitar que el usuario busque un registro inexistente
if ($user == null){ if ($user == null){
return view('errors.404'); return view('errors.404');
} }
// dd(is_null($user));
return view('users.show', compact('user')); return view('users.show', compact('user'));
} }
*/
// Muestra el detalle del usuario seleccionado
public function show(User $user){
return view('users.show', compact('user'));
}
// Hace el llamado a la función store para añadir un nuevo usuario
public function create() public function create()
{ {
return view('users.create'); return view('users.create');
} }
// Añade un nuevo usuarios a la DB
public function store(){ public function store(){
// recibe los campos del formulario y crea un usuario nuevo // recibe los campos del formulario y crea un usuario nuevo
...@@ -90,31 +98,51 @@ class UserController extends Controller ...@@ -90,31 +98,51 @@ class UserController extends Controller
]); ]);
return redirect()->route('users.index'); return redirect()->route('users.index');
// return 'Procesando información ...';
} }
// Hace llamado a la vista con el formulario para actualizar el usuario
public function edit(User $user) public function edit(User $user)
{ {
return view('users.edit', ['user' => $user]); return view('users.edit', ['user' => $user]);
} }
// Actualiza los usuarios
public function update(User $user){ public function update(User $user){
$data = request()->validate([ $data = request()->validate([
'name' => 'required', 'name' => 'required',
'email' => 'required|email|unique:users,email', // Con | puedes tener más de una regla, o pasando un array ['required', 'email', '...'] // Al actualizar se deja conservar el email del usuario
'password' => ['required','min:6'], // 'email' => 'required|email|unique:users,email,'.$user->id,
// Con la nueva sintaxis de laravel Rule
'email' => ['required', 'email', Rule::unique('users')->ignore($user->id)],
'password' => '', // El password no tiene que ser requerido
], [ ], [
'name.required' => 'El campo "Nombre del usuario" es requerido', 'name.required' => 'El campo "Nombre del usuario" es requerido',
'email.required' => 'El campo "Email" es requerido', 'email.required' => 'El campo "Email" es requerido',
'email.unique' => 'Otro usuario stá usando el email, este debe ser único', 'email.unique' => 'Otro usuario stá usando el email, este debe ser único',
'password.required' => 'El campo "Tu password" es requerido', // 'password.required' => 'El campo "Tu password" es requerido',
'password.min' => 'El campo "Tu password" debe tener al menos 6 caracteres', // 'password.min' => 'El campo "Tu password" debe tener al menos 6 caracteres',
]); ]);
/*
Condicional que se encarga de mira el password, para que el usuario que esté actualizando datos no este obligado a cambiar su password
*/
if ($data['password'] != null) {
$data['password'] = bcrypt($data['password']); $data['password'] = bcrypt($data['password']);
} else {
unset($data['password']); // Quita el indice password del array asociativo
}
$user->update($data); $user->update($data);
return redirect()->route('user.show', ['user' => $user]); return redirect()->route('users.show', ['user' => $user]);
} }
// Método para la eliminación de un usuario
public function destroy(User $user){
$user->delete();
return redirect()->route('users.index');
}
} }
...@@ -17,7 +17,7 @@ class User extends Authenticatable ...@@ -17,7 +17,7 @@ class User extends Authenticatable
* *
* @var array * @var array
*/ */
protected $fillable = [ protected $fillable = [ // Se indican los campos que van a ser cargados de forma masiva No poner campos sensibles (is_admin)
'name', 'email', 'password', 'name', 'email', 'password',
]; ];
......
...@@ -42,15 +42,16 @@ ...@@ -42,15 +42,16 @@
</button> </button>
<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 Registrados<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> </li>
<li class="nav-item active"> <li class="nav-item active">
<a class="nav-link" href="{{ route('users.store') }}">Nuevo Usuario<span class="sr-only">(current)</span></a> <a class="nav-link" href="{{ route('users.create') }}">Nuevo Usuario<span class="sr-only">(current)</span></a>
</li> </li>
</ul>
-->
</ul> </ul>
</div> </div>
</nav> </nav>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
@endif @endif
--}} --}}
<form action="{{route('users.store')}}" method="post"> <form action="{{ url('usuarios') }}" method="post">
{{-- {{--
Add _token (es un input type="hidden" que envia info que solo nuestro serve sabe) para evitar ataques de tipo CSRF 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"> <input type="hidden" name="_token" value="F3hukPNtUeW02l3URoLgyM1pd4uQPWazQrSaXQ8h">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
@section('content') @section('content')
<h1>Editar usuario</h1> <h1>Editar usuario</h1>
<form action="{{route('users.update')}}" method="post"> <form action="{{ url("usuarios/$user->id") }}" method="post">
{{ method_field('PUT') }} {{-- Método de laravel, que permite realizar una llamada, por medio del formulario, al {{ method_field('PUT') }} {{-- Método de laravel, que permite realizar una llamada, por medio del formulario, al
método PUT --}} método PUT --}}
{{csrf_field()}} {{csrf_field()}}
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
@section('content') @section('content')
<h1>{{ $title }}</h1> <h1>{{ $title }}</h1>
<ul> <ul>
@forelse ($users as $user) @forelse ($users as $user)
<li> <li>
...@@ -24,7 +25,6 @@ ...@@ -24,7 +25,6 @@
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>
......
...@@ -20,6 +20,14 @@ ...@@ -20,6 +20,14 @@
@index = Apunta a la function index() @index = Apunta a la function index()
--> -->
</p> </p>
<p>
<a href="{{ route('users.edit', $user) }}">Editar usuario</a> {{-- Se pasa solo el modelo de eloquent --}}
</p>
<form action="{{ route('users.destroy', $user) }}" method="post">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button class="btn btn-primary" type="submit">Eliminar usuario</button>
</form>
@endsection @endsection
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
use App\Http\Controllers\welcomeUserController; use App\Http\Controllers\welcomeUserController;
Route::get('/', function () { Route::get('/', function () {
return view('welcome'); return view('Home');
}); });
Route::get('/usuarios', 'UserController@index') Route::get('/usuarios', 'UserController@index')
->name('users.index'); ->name('users.index');
Route::get('/usuarios/{id}', 'UserController@show') Route::get('/usuarios/{user}', '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 // Rutas par la creación de usuarios - Métodos get / post
...@@ -29,16 +29,17 @@ Route::get('/usuarios/{id}', 'UserController@show') ...@@ -29,16 +29,17 @@ Route::get('/usuarios/{id}', 'UserController@show')
* post -> Enviar y procesar 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');
// Ruta para la edición del usuario, carga los datos // Ruta para la edición del usuario, carga los datos
Route::get('/usuarios/{user}/editar', 'UserController@edit')->name('users.edit'); Route::get('/usuarios/{user}/editar', 'UserController@edit')->name('users.edit');
Route::post('/usuarios', 'UserController@store')->name('users.store');
// Ruta para la actualzación en DB de los datos // Ruta para la actualzación en DB de los datos
Route::put('/usuarios/{user}', 'UserController@update')->name('users.update'); Route::put('/usuarios/{user}', 'UserController@update')
->name('users.update');
Route::delete('usuarios/{user}', 'UserController@destroy')->name('users.destroy');
Route::get('/saludo/{name}/{nickname?}', 'welcomeUserController');
...@@ -38,21 +38,25 @@ class pruebaTest extends TestCase ...@@ -38,21 +38,25 @@ class pruebaTest extends TestCase
*/ */
/** @test */ /** @test */
function it_create_new_user(){ function it_creates_a_new_user()
{
//$this->withoutExceptionHandling();
$this->post('/usuarios/', [ $this->post('/usuarios/', [
'name' => 'Duilio', 'name' => 'Usuario Prueba',
'email' => 'duilio@styde.net', 'email' => 'user.prueba@mail.es',
'password' => '123456', 'password' => '123456'
]);// ->assertSee('Procesando información ...'); ])->assertRedirect('/usuarios');
$this->assertDatabaseHas('users', [ $this->assertCredentials([
'name' => 'Duilio Palacios', 'name' => 'Usuario Prueba',
'email' => 'duilio@sryde.net', 'email' => 'user.prueba@mail.es',
'password' => '123456',
]); ]);
} }
/** @test */ /** @test */
function the_name_is_required(){ /* function the_name_is_required(){
// $this->withoutExceptionHandling(); // $this->withoutExceptionHandling();
$this->post('usuarios', [ $this->post('usuarios', [
...@@ -64,5 +68,5 @@ class pruebaTest extends TestCase ...@@ -64,5 +68,5 @@ class pruebaTest extends TestCase
$this->assertDatabaseMissing('users', [ $this->assertDatabaseMissing('users', [
'email'=> 'duilio@styde.net', '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