Мой контроллер игнорирует мое пользовательское правило проверки - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно пользовательское правило проверки для моего приложения.В качестве доказательства концепции я создал простое правило проверки.В целях тестирования метод pass возвращает false.Я добавил валидацию в мой контроллер, но даже если валидатор возвращает false, контроллер продолжает работать так, как будто проверка прошла успешно.Я использовал отладчик, чтобы подтвердить, что метод pass действительно используется и возвращает false.

Почему я делаю неправильно?

Вот мой класс правил:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class UniqueAgent implements Rule
{

    protected $id;

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     */
    public function setId($id): void
    {
        $this->id = $id;
    }

    /**
     * UniqueAgent constructor.
     */
    public function __construct($id)
    {
        $this->setId($id);
    }

    public function passes($attribute, $value)
    {
        // TODO: Implement passes() method.
        return false;
    }

    public function message()
    {
        // TODO: Implement message() method.
    }

}

Вот код контроллера:

public function update(Request $request, $id)
{
    // UniqueAgent rule returns 'false'
    $validateData = $request->validate([
       'agency' => [
           'required',
           new UniqueAgent($id)
       ]
     ]);
    $agent = Agent::findOrFail($id)
    $agent->agency = $request->input('agency');
    $agent->save();
 }

Спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Проблема решена.Для тех, кто заинтересован, я не добавил возвращаемое значение в метод сообщения класса UniqueAgent.Я добавил возврат «некоторая строка», и теперь контроллер перенаправляет клиента для просмотра и отображает сообщение об ошибке.

На мой взгляд, это плохой дизайн.Если не возвращение строки сообщения приводит к тому, что класс не работает должным образом, он не должен просто тихо проваливаться.На мой взгляд, было бы лучше, если бы контроллер просто делал то, что он делает, когда проверка не удалась (т.е. перенаправляет на представление), с сообщением об ошибке или без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...