Обязательное поле Laravel при обновлении модели

У меня есть система пользователей, которая позволяет создавать учетные записи, входить в систему и выходить из нее.

В настоящее время я работаю над редактированием профиля, который позволяет редактировать полное имя, имя пользователя и т. Д.
Для этой процедуры я бы хотел, чтобы пароль не требовался, однако он должен потребоваться для создания и входа в систему процедуры.

Есть ли способ поддержать это в Laravel?

Я думал об обнаружении наличия Input :: get ('password'), а если нет, прохождение исходного пароля, однако это будет повторно хешировать

Итак, подытоживая, я бы хотел, чтобы поле пароля было обязательным при создании, но не при процедурах обновления. В качестве альтернативы, если есть другой способ достичь того же результата, я открыт для него.

Для справки я использую JeffreyWay / Laravel-Model-Validators, который выполняет проверку в процедура сохранения.


person Dan Hanly    schedule 15.10.2014    source источник


Ответы (1)


Вероятно, вы не сможете этого сделать с помощью этого пакета. Однако вы можете создать такую ​​функциональность вручную, например, создав 2 метода, которые выбирают обязательные поля для проверки, часть класса User:

protected static $rules
    = [
        'name'            => 'required|min:3|max:60',          
        'password'        => [
            'required',
            'min:10'
        ],

    ];


public static function validateRegistration($data, $translation)
{
    return self::validate($data, $translation);
}

public static function validateUpdate($data, $translation)
{

    $rules = self::$rules;
    if (trim($data['password']) == '') {
        unset($rules['password']); // unsetting unwanted password rule
    }
    return self::validate($data, $translation, $rules);
}

public static function validate($data, $translation, $rules = null) 
{
    if (is_null($rules)) {
        $rules = self::$rules;
    }

    $v = Validator::make($data, $rules, $translation);

    if ($v->fails()) {
        self::$errors = $v->messages()->toArray();
        return false;
    }

    return true;
}
person Marcin Nabiałek    schedule 15.10.2014
comment
Спасибо за это, я попробую. - person Dan Hanly; 16.10.2014