php artisan infyom:scaffold Role --skip=migration,model
name string text
required
permissions integer selectTable:Permissions:name,id
required
Al ejecutar nos dará el error que no encuentra App\Models\Role, cambiar en todos sitios:
use App\Models\Role;
por
use Spatie\Permission\Models\Role;
Ya funciona pero no lo muestra todo en json con todos los datos (solo queremos q nos muestre el nombre), para mostrarlo bien ir a: \resources\views\roles\table.blade.php y cambiar:
{{ $role->permissions }}
por
{{ implode(", ", $role->permissions->pluck("name")->toArray()) }}
Al intentar añadir uno nuevo nos dirá que no encuentra App\Models\Permission, cambiar en todos sitios:
App\Models\Permission
por
use Spatie\Permission\Models\Permission;
Para poder seleccionar en el combo más de un rol, cambiar en \resources\views\roles\fields.blade.php:
['class' => 'form-control']
por
['multiple' => 'multiple', 'class' => 'form-control', 'name' => 'permissions[]']
En app\Http\Controllers\RoleController.php cambiar el store a:
$input = $request->all();
unset($input['permissions']);
$role = $this->roleRepository->create($input);
$role->syncPermissions($request->permissions);
Flash::success('Role saved successfully.');
return redirect(route('roles.index'));
Tanto en app\Http\Requests\CreateRoleRequest.php como en app\Http\Requests\UpdateRoleRequest.php la función rules() dejarla así:
$rules = [
'name' => 'required',
'permissions' => 'required'
];
return $rules;
En resources\views\roles\show_fields.blade.php cambiar a:
{{ implode(", ", $role->permissions->pluck('name')->toArray()) }}
En app\Http\Controllers\RoleController.php en la función Update sería:
$role = $this->roleRepository->find($id);
if (empty($role)) {
Flash::error('Role not found');
return redirect(route('roles.index'));
}
$input = $request->all();
unset($input["permissions"]);
$role = $this->roleRepository->update($input, $id);
$role->permissions()->detach(); // elimina la relación q hubiera
$role->syncPermissions($request->permissions);
Flash::success('Role updated successfully.');
return redirect(route('roles.index'));
No hay comentarios:
Publicar un comentario