Как проверить данные с помощью запроса Model by POST, отправленного через вызов REST (без ActiveForm) — Yii2

Я создаю Yii приложение, в котором данные отправляются через POST запрос на мой сервер через REST звонки. Как нет ActiveForm исходя из сценария, каков наилучший подход для проверки данных с помощью класса Model, для которого данные отправляются, и после успешной проверки они будут сохранены в таблицу базы данных.

Я прошел официальные документы, но не нашел ничего связанного. Как встроенный подход дается для ActiveForm $model->validate()Мне интересно, если что-то вроде этого так просто, как вызов функции для данных, размещенных без ActiveForm чтобы проверить эти данные с моим Model учебный класс.

Я знаю, что это можно сделать с isset($_POST['somefield'] но это немного традиционный подход & повторять для каждого поля (лично я считаю скучным занятие, чтобы проверить, размещены ли данные в поле, а затем выполнить проверку для каждого поля отдельно).

Есть ли официальный документ, который я пропустил? Или, если это не указано в документе, какой будет наилучший подход?

Предложите мне что-нибудь для создания магического кода ..

1

Решение

Хорошо, после некоторого исследования я нашел решение указанной проблемы, как показано ниже:

    $model = new AppDetails();
$model->setAttributes(Yii::$app->request->post(), false);
if($model->validate() && $model->save())
{
return true;
}
return false;

Согласно Yii документы, setAttributes() делает Устанавливает значения атрибута массовым способом. Здесь я создал новый объект для своего модельного класса, а затем установил атрибуты, поступающие после запроса.

После того, как я установил атрибуты для моего объекта класса модели, я мог тогда validate() их, а также сохранить их непосредственно в БД, просто позвонив save() применимо только после успешной проверки.

Однако при этом вам необходимо отправить все атрибуты в соответствии с разделом правил вашей модели (включая автоматически увеличиваемые значения первичного ключа. Также вы можете установить их позже, если вы не отправляете их по вызову остальных, как $model->id=''). Иначе, validate() вернет ложь.

Быть более конкретным о $model->load() он возвращает истину, если данные отправлены из Form(согласно тому, что я понял из моего опыта программирования) с полями, установленными с объектом Модельный класс (узнать больше Вот). load() автоматически загружает formName в фоновом сценарии, установленном разработчиками Yii.

Вы можете попробовать сделать как $model->load(Yii::$app->request->post()) с данными, отправленными через вызов REST, он всегда будет возвращать false, потому что атрибуты не установлены.

Я думаю, что объяснил решение моей вышеупомянутой проблемы. Укажите, если что-то не так или не совсем понятно.

Я надеюсь, что это поможет будущим читателям с той же проблемой.

1

Другие решения

Что не так с традиционным …

if ($model->load(Yii::$app->request->post()) && $model->validate()) {
//$model loaded with post data and validated
}

…?

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector