beyondelayer Öncelikle şu yazımı okuyun ve neden Doctor, Teacher... gibi role göre model oluşturmamamız gerektiğini anlamaya çalışın, özellikle ilk paragraf:
https://laravel.gen.tr/d/4959-laravel-8-multi-auth-jetstream/2
Tek bir ProfileController ve tek bir url ile bir kullanıcının profilini düzenlemek istiyorsunuz fakat kullanıcıların profil bilgileri rollere göre değişiyor. Bu yüzden profil düzenleme gereksinimleri farklı. Önce form request ile başlayalım:
public function rules(): array
{
// Burası tüm roller için genel kurallar...
$rules = [
'email' => [
'email',
'unique:users',
],
'password' => [
'confirmed',
Password::min(8)
],
];
if($this->user()->hasRole('admin')) {
$rules = array_merge($rules, [
// Buraya admin rolü ile ilgili alanların kuralları...
]);
}
if($this->user()->hasRole('doctor')) {
$rules = array_merge($rules, [
// Buraya doctor rolü ile ilgili alanların kuralları...
]);
}
return $rules
}
Bu şekilde role göre kuralları belirleyebilirsiniz.
Blade kısmında ise tek bir şablonda
@role('admin')
<section>
{{-- Buraya admin ile ilgili form elementleri --}}
</section>
@endrole
@role('doctor')
<section>
{{-- Buraya doctor ile ilgili form elementleri --}}
</section>
@endrole
şeklinde rollere göre form tasarlayabilirsiniz. Role özel bölümleri ayrı birer section olarak gösterebilirsiniz.
Controller içinde ise; profil düzenleyen bir servis yazıp role göre hangi servis yönteminin çalışması gerekeceğini belirleyebilirsiniz. mesela her bir rol için o rolü güncelleyen bir yöntem ekleyebilirsiniz ya da interface kullanabilirsiniz:
https://laravel.gen.tr/d/7174-service-siniflari-hakkinda