I have unset the index and create class in Rest API, and am trying to insert values in Model before saving. But my model is not getting initiating and is probably a null. My code is here:
<?php
namespace api\controllers;
use yii\rest\ActiveController;
use common\models\Lift;
class LiftsController extends ActiveController
{
public $modelClass = 'common\models\Lift';
public function actions()
{
$actions = parent::actions();
unset($actions['index'], $actions['create']);
return $actions;
}
public function actionIndex($id)
{
return \common\models\Lift::find()->where(['freq_id' => $id])->one();
}
public function actionCreate()
{
$model = new \common\models\Lift();
$response = array();
$response["success"] = false;
$response["message"] = "Before if";
if ($model->load(\Yii::$app->request->post()) ) {
$response["success"] = true;
}
return ($response);
}
}
The response is here:
{
"status": {
"response_code": 0,
"response_message": "OK",
"response_extra": null
},
"data": {
"success": false,
"message": "Before if"
}}
The index action is working as desired, but the create action is not allowing me initiate the model object.
Strange! if I capture the post in a different variable it works!
<?php
namespace api\controllers;
use yii\rest\ActiveController;
use common\models\Lift;
class LiftsController extends ActiveController
{
public $modelClass = 'common\models\Lift';
public function actions()
{
$actions = parent::actions();
unset($actions['index'], $actions['create']);
return $actions;
}
public function actionIndex($id)
{
return \common\models\Lift::find()->where(['freq_id' => $id])->one();
}
public function actionCreate()
{
$model = new \common\models\Lift();
$response = array();
$response["success"] = false;
$response["message"] = "Failed to save Record";
$params = \Yii::$app->request->post();
foreach ($params as $key => $value) {
$model[$key] = $value;
}
$date = date('Y-m-d H:i:s');
$model["created_at"] = $date;
if ($model->save()) {
$response["success"] = true;
$response["message"] = "Saved Record";
}
return ($response);
}
}
Response Message
{
"status": {
"response_code": 0,
"response_message": "OK",
"response_extra": null
},
"data": {
"success": true,
"message": "Saved Record"
}
}
joji
(Jojimltm)
June 7, 2016, 7:33am
3
Try This
public function actionCreate()
{
$model = new \common\models\Lift();
$response = array();
$response["success"] = false;
$response["message"] = "Failed to save Record";
if ($model->load(\Yii::$app->getRequest()->getBodyParams(), '')) {
$date = date('Y-m-d H:i:s');
$model->created_at = $date;
if($model->save()){
$response["success"] = true;
$response["message"] = "Saved Record";
}
}
return ($response);
}
Yes Joji, it worked. But still the question is
Why -> [size=2]$model[/size][color=#666600][size=2]->[/size][/color][size=2]load[/size][color=#666600][size=2](\[/size][/color][color=#660066][size=2]Yii[/size][/color][color=#666600][size=2]::[/size][/color][size=2]$app[/size][color=#666600][size=2]->[/size][/color][size=2]getRequest[/size][color=#666600]size=2 ->[/size][/color][size=2]getBodyParams[/size][color=#666600]size=2 ,[/size][/color][size=2] [/size][color=#008800][size=2]’’[/size][/color][color=#666600][size=2])[/size][/color]
Why not -> [size=2]$model[/size][color=#666600][size=2]->[/size][/color][size=2]load[/size][color=#666600]size=2 [/size][/color]
Could you please elaborate?
joji
(Jojimltm)
June 7, 2016, 10:24am
5
It will work if you are posting values like this[color="#660066 "][size=“2”] Lift[’[/size][/color][size=“2”]created_at’][/size]
[size="2"]Please check var_dump([/size][color="#666600 "][size="2"]\[/size][/color][color="#660066 "][size="2"]Yii[/size][/color][color="#666600 "][size="2"]::[/size][/color][color="#1C2837 "][size="2"]$app[/size][/color][color="#666600 "][size="2"]->[/size][/color][color="#1C2837 "][size="2"]request[/size][/color][color="#666600 "][size="2"]->[/size][/color][color="#1C2837 "][size="2"]post[/size][/color][color="#666600 "]size="2" [/size][/color][size="2"]);[/size]
bumeshrai
(Bumeshrai)
June 7, 2016, 12:54pm
6
As originally said, this line is working:
[color=#000000]$params [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]\[/color][color=#660066]Yii[/color][color=#666600]::[/color][color=#000000]$app[/color][color=#666600]->[/color][color=#000000]request[/color][color=#666600]->[/color][color=#000000]post[/color]color=#666600 ;[/color]
But not this line:
[color=#000000]$model[/color][color=#666600]->[/color][color=#000000]load[/color]color=#666600 [/color]
Both are getting data from
[color=#666600]\[/color][color=#660066]Yii[/color][color=#666600]::[/color][color=#000000]$app[/color][color=#666600]->[/color][color=#000000]request[/color][color=#666600]->[/color][color=#000000]post[/color]color=#666600 [/color]
Only difference is the load method. But ‘load’ is working in your supplied code!!