За последние 24 часа нас посетили 22452 программиста и 1056 роботов. Сейчас ищут 615 программистов ...

Кастомные аттрибуты

Тема в разделе "Laravel", создана пользователем Exort, 16 июл 2019.

  1. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Друзья, доброго времени суток.
    За ранее большое спасибо за потраченное время.

    Проблема: создал кастомный аттрибут, необходимо сделать так, чтобы laravel не пытался записать его в базу данных.
    На 61 строке я записываю пароль до процесса хеширования в кастомный аттрибут «openPassword». Laravel пытается его insert в базу данных. Как ограничить этот аттрибут от записи?

    Код:
    PHP:
    1. <?php
    2.  
    3. namespace App;
    4.  
    5. use Illuminate\Notifications\Notifiable;
    6. use Illuminate\Contracts\Auth\MustVerifyEmail;
    7. use Illuminate\Foundation\Auth\User as Authenticatable;
    8. use Illuminate\Support\Str;
    9.  
    10. class User extends Authenticatable
    11. {
    12.     use Notifiable;
    13.  
    14.     protected $appends = [
    15.         'openPassword'
    16.     ];
    17.  
    18.     protected $fillable = [
    19.         'login',
    20.         'password',
    21.         'access_level',
    22.         'api_token',
    23.         'name',
    24.         'surname',
    25.         'patronymic',
    26.         'department_id',
    27.         'group_id'
    28.     ];
    29.  
    30.     protected $casts = [
    31.         'login' => 'string',
    32.         'password' => 'string',
    33.         'access_level' => 'string',
    34.         'api_token' => 'string',
    35.         'name' => 'string',
    36.         'surname' => 'string',
    37.         'patronymic' => 'string',
    38.         'department_id' => 'integer',
    39.         'group_id' => 'integer'
    40.     ];
    41.  
    42.     protected $attributes = [
    43.         'originalPassword' => null
    44.     ];
    45.  
    46.     public static function boot()
    47.     {
    48.         parent::boot();
    49.  
    50.         self::creating(function ($user) {
    51.             $tmp = [
    52.                 'usersCount' => User::count(),
    53.                 'letterOfName' => Str::substr($user->name, 0, 1),
    54.                 'letterOfPatronymic' => Str::substr($user->patronymic, 0, 1),
    55.                 'openPassword' => null
    56.             ];
    57.  
    58.             $login = "{$user->surname}-{$tmp["usersCount"]}{$tmp["letterOfName"]}{$tmp["letterOfPatronymic"]}";
    59.             $user->login = Str::slug($login);
    60.             $password = $user->login . Str::slug($user->name);
    61.             $user->originalPassword = str_shuffle($password);
    62.             $user->password = str_shuffle($password);
    63.             $user->api_token = Str::random(16);
    64.         });
    65.     }
    66.  
    67.     public function setPasswordAttribute($value)
    68.     {
    69.         return $this->attributes["password"] = bcrypt($value);
    70.     }
    71.  
    72.     public function setApiTokenAttribute($value)
    73.     {
    74.         return $this->attributes["api_token"] = bcrypt($value);
    75.     }
    76.  
    77. }
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    А в hidden его?
     
  3. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Пробовал