ventajas tutorial framework ejemplos desventajas advanced php yii2

php - tutorial - yii2 install



El modelo Yii2 ahorra valores nulos (1)

load() método load() utiliza setAttributes() : setAttributes() cuenta que los datos que se están poblando están sujetos a la comprobación de seguridad de setAttributes (). Las asignaciones por defecto solo se harán a los atributos seguros. Un atributo seguro es uno que está asociado con una regla de validación en el escenario $ actual. Agrega reglas y debería funcionar.

Estoy usando la solicitud REST POST para crear una nueva fila en mi db, pero me ahorra valores nulos en lugar de los valores que envié. Así que traté de enviar una solicitud PUT para modificar datos existentes, pero no devolvió una fila modificada (como cuando uso GET). En realidad, la solicitud GET funciona bien

CountryController.php:

<?php namespace app/controllers; use yii/rest/ActiveController; class CountryController extends ActiveController { public $modelClass = ''app/models/Country''; }

Modelo Country.php:

Intenté hacer esto con otra tabla sin establecer primaryKey aquí, pero obtuve el mismo resultado.

<?php namespace app/models; use yii/db/ActiveRecord; class Country extends ActiveRecord { public static function primaryKey() { return [''code'']; } }

Aquí está mi mesa:

mysql> describe country; +------------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+-------+ | code | char(2) | NO | PRI | NULL | | | name | char(52) | NO | | NULL | | | population | int(11) | NO | | 0 | | +------------+----------+------+-----+---------+-------+ mysql> select * from country; +------+----------------+------------+ | code | name | population | +------+----------------+------------+ | AU | Australia | 18886000 | | BR | Brazil | 170115000 | | CA | Canada | 1147000 | | CN | China | 1277558000 | | DE | Germany | 82164700 | | FR | France | 59225700 | | GB | United Kingdom | 59623400 | | IN | India | 1013662000 | | RU | Russia | 146934000 | | US | United States | 278357000 | +------+----------------+------------+

Intente publicar datos:

Y obtiene el resultado:

mysql> select * from country; +------+----------------+------------+ | code | name | population | +------+----------------+------------+ | | | 0 | | AU | Australia | 18886000 | | BR | Brazil | 170115000 | | CA | Canada | 1147000 | | CN | China | 1277558000 | | DE | Germany | 82164700 | | FR | France | 59225700 | | GB | United Kingdom | 59623400 | | IN | India | 1013662000 | | RU | Russia | 146934000 | | US | United States | 278357000 | +------+----------------+------------+

También intenté imprimir la solicitud usando print_r / die y obtuve el resultado correcto obvio /vendor/yiisoft/yii2/rest/CreateAction.php

public function run() { if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id); } /* @var $model /yii/db/ActiveRecord */ $model = new $this->modelClass([ ''scenario'' => $this->scenario, ]); $model->load(Yii::$app->getRequest()->getBodyParams(), ''''); if ($model->save(false)) { // PRINT THE REQUEST DATA print_r(Yii::$app->getRequest()->getBodyParams()); die(); $response = Yii::$app->getResponse(); $response->setStatusCode(201); $id = implode('','', array_values($model->getPrimaryKey(true))); $response->getHeaders()->set(''Location'', Url::toRoute([$this->viewAction, ''id'' => $id], true)); } elseif (!$model->hasErrors()) { throw new ServerErrorHttpException(''Failed to create the object for unknown reason.''); } return $model; }

Vista previa de respuesta:

Pero esta información no se guardó en la base de datos correctamente como describí anteriormente