// no quiero q me genere ni la migracion ni el modelo pq ya existe de antes
php artisan infyom:scaffold User --skip=migration,model
name string text
required
email string email
required|email
password string password
required|min:5
role integer selectTable:roles:name,name
required
php artisan migrate
En el td de la view de \resources\views\users\table.blade.php para mostrar el rol correspondiente:
como getRoleNames() te devuelve un json vamos a ponerlo bonito con implode y luego toArray()
{{ implode(" ",$user->getRoleNames()->toArray()) }}
En \app\Providers\ViewServiceProvider.php Cambiar:
use App\Models\Role;
por
use Spatie\Permission\Models\Role;
En \resources\views\users\fields.blade.php cambiar como obtener el campo de rol:
{!! Form::select('role', $roleItems, isset($user) ? $user->roles()->pluck("id"):[], ['class' => 'form-control']) !!}
$roleItems no se pq lo hace mal y el array empieza desde cero por lo que en \app\Providers\ViewServiceProvider.php:
$roleItems = Role::pluck('name')->toArray();
$roleItemsAux = array();
foreach($roleItems as $clave => $valor) {
$roleItemsAux[$clave+1] = $valor;
}
// print_r($roleItemsAux);exit;
$view->with('roleItems', $roleItemsAux);
En app\Http\Controllers\UserController.php:
use Illuminate\Support\Facades\Hash;
En el store app\Http\Controllers\UserController.php cambiar:
$input = $request->all();
$input["password"] = Hash::make( $input["password"]);
$user = $this->userRepository->create($input);
$user->assignRole($request->role);
En el update de app\Http\Controllers\UserController.php cambiar:
// a la hora de editar el pw lo podemos dejar en blanco
if ($request["password"]) { // si se ha escrito algo
$request["password"] = Hash::make( $request["password"]);
}
else {
unset($request["password"]); // eliminamos pq sino update nulo
}
$user = $this->userRepository->update($request->all(), $id);
// eliminar el rol anterior y poner el nuevo
$user->roles()->detach();
$user->assignRole($request->role);
En app\Models\User.php:
public static $rules = [
'name' => 'required',
'email' => 'required|email',
'password' => 'required|min:5'
];
// no queremos q cuando se modifique el pw sea requerido
public static $updateRules = [
'name' => 'required',
'email' => 'required|email',
];
Y en app\Http\Requests\UpdateUserRequest.php en la función rules():
$rules = User::$updateRules;
No hay comentarios:
Publicar un comentario