[英]How to validate data with a Model by POST request sent over REST call(without ActiveForm) - Yii2
我正在創建一個Yii應用程序,其中數據通過 REST 調用通過POST
請求發送到我的服務器。 由於場景中沒有ActiveForm
,因此使用正在發送數據的 Model 類驗證數據的最佳方法是什么,並在成功驗證后將其保存到 db 表中。
我瀏覽了官方文檔,但沒有找到任何相關內容。 由於為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()
確實以大量方式設置屬性值。 在這里,我為我的模型類創建了新對象,然后設置了來自 post 請求的屬性。
一旦我將屬性設置為我的模型類對象,我就可以validate()
它們並將它們直接保存在數據庫中,僅在成功驗證后才調用save()
適用。
但是,有了這個,您必須根據模型的規則部分發送所有屬性(包括主鍵自動遞增值。如果您不通過$model->id=''
類的休息調用發送它,您也可以稍后設置它們)。 否則, validate()
將返回 false。
更具體地講$model->load()
如果數據是從Form
發布的(根據我從我的編碼經驗中了解到的),並且字段設置為Model 類的對象,則它返回 true(請參閱此處的更多信息)。 load()
然后在 Yii 開發人員設置的后台場景中自動加載formName
。
您可以嘗試像$model->load(Yii::$app->request->post())
使用通過 REST 調用發送的數據,它總是會返回 false,因為未設置屬性。
我想我已經解釋了上述問題的解決方案。 如果有任何錯誤或無法很好理解,請指出。
我希望它可以幫助未來有同樣問題的讀者。
傳統的有什么不好...
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
//$model loaded with post data and validated
}
……?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.