Я создаю Yii приложение, в котором данные отправляются через POST
запрос на мой сервер через REST звонки. Как нет ActiveForm
исходя из сценария, каков наилучший подход для проверки данных с помощью класса Model, для которого данные отправляются, и после успешной проверки они будут сохранены в таблицу базы данных.
Я прошел официальные документы, но не нашел ничего связанного. Как встроенный подход дается для ActiveForm
$model->validate()
Мне интересно, если что-то вроде этого так просто, как вызов функции для данных, размещенных без ActiveForm
чтобы проверить эти данные с моим Model
учебный класс.
Я знаю, что это можно сделать с isset($_POST['somefield']
но это немного традиционный подход & повторять для каждого поля (лично я считаю скучным занятие, чтобы проверить, размещены ли данные в поле, а затем выполнить проверку для каждого поля отдельно).
Есть ли официальный документ, который я пропустил? Или, если это не указано в документе, какой будет наилучший подход?
Предложите мне что-нибудь для создания магического кода ..
Хорошо, после некоторого исследования я нашел решение указанной проблемы, как показано ниже:
$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, потому что атрибуты не установлены.
Я думаю, что объяснил решение моей вышеупомянутой проблемы. Укажите, если что-то не так или не совсем понятно.
Я надеюсь, что это поможет будущим читателям с той же проблемой.
Что не так с традиционным …
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
//$model loaded with post data and validated
}
…?