feat: override save method in Profile page to handle custom password session updates and transaction management
This commit is contained in:
parent
a072580761
commit
fcda1c3914
@ -18,9 +18,12 @@
|
|||||||
use Filament\Schemas\Components\Section;
|
use Filament\Schemas\Components\Section;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Support\Enums\Width;
|
use Filament\Support\Enums\Width;
|
||||||
|
use Filament\Support\Exceptions\Halt;
|
||||||
|
use Filament\Support\Facades\FilamentView;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Validation\Rules\Password;
|
use Illuminate\Validation\Rules\Password;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
class Profile extends EditProfile
|
class Profile extends EditProfile
|
||||||
{
|
{
|
||||||
@ -232,6 +235,54 @@ public function form(Schema $schema): Schema
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function save(): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->beginDatabaseTransaction();
|
||||||
|
|
||||||
|
$this->callHook('beforeValidate');
|
||||||
|
|
||||||
|
$data = $this->form->getState();
|
||||||
|
|
||||||
|
$this->callHook('afterValidate');
|
||||||
|
|
||||||
|
$data = $this->mutateFormDataBeforeSave($data);
|
||||||
|
|
||||||
|
$this->callHook('beforeSave');
|
||||||
|
|
||||||
|
$this->handleRecordUpdate($this->getUser(), $data);
|
||||||
|
|
||||||
|
$this->callHook('afterSave');
|
||||||
|
} catch (Halt $exception) {
|
||||||
|
$exception->shouldRollbackDatabaseTransaction() ?
|
||||||
|
$this->rollBackDatabaseTransaction() :
|
||||||
|
$this->commitDatabaseTransaction();
|
||||||
|
|
||||||
|
return;
|
||||||
|
} catch (Throwable $exception) {
|
||||||
|
$this->rollBackDatabaseTransaction();
|
||||||
|
|
||||||
|
throw $exception;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->commitDatabaseTransaction();
|
||||||
|
|
||||||
|
if (request()->hasSession() && array_key_exists('password', $data)) {
|
||||||
|
request()->session()->put([
|
||||||
|
'password_hash_'.filament()->getAuthGuard() => $data['password'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->data['password'] = null;
|
||||||
|
$this->data['passwordConfirmation'] = null;
|
||||||
|
|
||||||
|
$this->getSavedNotification()?->send();
|
||||||
|
|
||||||
|
if ($redirectUrl = $this->getRedirectUrl()) {
|
||||||
|
$this->redirect($redirectUrl, navigate: FilamentView::hasSpaMode($redirectUrl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected function mutateFormDataBeforeFill(array $data): array
|
protected function mutateFormDataBeforeFill(array $data): array
|
||||||
{
|
{
|
||||||
$user = $this->getUser();
|
$user = $this->getUser();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user