[Yii2] caricare i dati in Post ad un Model Form

Salve a tutti, ho creato un semplice model che contiene i campi della mia form.

Nella view vado a creare un ActiveForm e ci inserisco i campi che deve compilare l’utente.

Ora sono nel controller dove devo verificare se son presenti dati nel Post e caricarli al model per effettuare delle operazioni.

Il problema è che non riesco a valorizzare i campi del model che rimangono sempre vuoti

Questo è il model:




namespace app\models\admin;


use yii\base\Model;




class JracLibForm extends Model

{

 

    public $crop_x;

    public $crop_y;

    public $crop_width;

    public $crop_height;

    public $image_width;

    public $image_height;


}



e questo è il controller:




   public function actionProfile()

    {

         $jrac   = new JracLibForm();

        

        if (Yii::$app->request->isPost) {

            $jrac->load(Yii::$app->request->post());

           

        } 

        

            return $this->render("profile", [

                'jrac'    => $jrac

                

            ]

            );

    }



Ho controllato che nel Post c’è il model che contiene tutti i campi valorizzati, solamente non capisco come mai non mi popola i campi di $jrac. Mi sembra banale come giro eppure non va.

Ho anche verificato che “$jrac->load…” ritorna true il che significa che il model è stato popolato con qualche dato, ma poi provo a fare un print_r($jrac) nella view e vedo tutti i campi vuoti :(




app\models\admin\JracLibForm Object ( [crop_x] => [crop_y] => [crop_width] => [crop_height] => [image_width] => [image_height] => [_errors:yii\base\Model:private] => [_validators:yii\base\Model:private] => ArrayObject Object ( [storage:ArrayObject:private] => Array ( ) ) [_scenario:yii\base\Model:private] => default [_events:yii\base\Component:private] => Array ( ) [_behaviors:yii\base\Component:private] => ) 



Avete idea del perchè? Cosa sto sbagliando o cosa mi manca di fare?

Grazie in anticipo.

Probabilmente perché nel modello non hai dichiarato alcuna rule, se non specifichi delle business rule per gli attributi questi vengono ingnorati da load().

Nel tuo modello devi mettere una cosa tipo:




public function rules()

{

    return [

        [['crop_x', 'crop_y', 'crop_width', 'crop_height', ...], 'safe'],


    ];

}



o specificare per ogni tipo di campo un validatore (integer, required, number, etc…)

Nella mia città c’è la fiera di San Nicola il 14 di settembre…grazie mille era quello!

Pensavo che omettendo rules() prendeva quelli del model con sun set di base e bastava quello, se non scoprire ora che nel model rules() esiste ma è vuota!

Se guardi i sorgenti load() usa setAttribute() che di default accetta solo attributi “safe”, cioè che hanno una rule dichiarata! :)

Per il futuro dai sempre uno sguardo ai commenti nelle classi dei sorgenti di Yii c’è una marea di informazioni e molto chiare, tutta la migliore documentazione al momento è nei commenti dei sorgenti!