Add mass assignable attributes to User model and specify custom login page in AdminPanelProvider

This commit is contained in:
2025-09-22 13:35:08 +05:00
parent 8a14482c07
commit 60afe0c441
4 changed files with 88 additions and 1 deletions

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Filament\Pages\Auth;
use Filament\Auth\Pages\Login as BaseLogin;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
use Illuminate\Validation\ValidationException;
class Login extends BaseLogin
{
public function form(Schema $schema): Schema
{
return $schema
->components([
$this->getLoginFormComponent(),
$this->getPasswordFormComponent(),
$this->getRememberFormComponent(),
]);
}
protected function getLoginFormComponent(): TextInput
{
return TextInput::make('login')
->label('Email or Phone Number')
->required()
->autofocus();
}
protected function getCredentialsFromFormData(array $data): array
{
$login_type = filter_var($data['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'phone_number';
return [
$login_type => $data['login'],
'password' => $data['password'],
];
}
protected function throwFailureValidationException(): never
{
throw ValidationException::withMessages([
'data.login' => __('filament-panels::auth/pages/login.messages.failed'),
]);
}
}

View File

@@ -14,6 +14,18 @@ class User extends Authenticatable implements FilamentUser
/** @use HasFactory<UserFactory> */ /** @use HasFactory<UserFactory> */
use HasFactory, Notifiable; use HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
'phone_number',
];
/** /**
* The attributes that should be hidden for serialization. * The attributes that should be hidden for serialization.
* *

View File

@@ -2,6 +2,7 @@
namespace App\Providers\Filament; namespace App\Providers\Filament;
use App\Filament\Pages\Auth\Login;
use Filament\Pages\Dashboard; use Filament\Pages\Dashboard;
use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DisableBladeIconComponents;
@@ -27,7 +28,7 @@ class AdminPanelProvider extends PanelProvider
->default() ->default()
->id('panel') ->id('panel')
->path('panel') ->path('panel')
->login() ->login(Login::class)
->registration() ->registration()
->colors([ ->colors([
'primary' => Color::Amber, 'primary' => Color::Amber,

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('phone_number')->unique()->nullable()->after('email');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phone_number');
});
}
};