2017-10-08 2 views
1

La fonction Phalcon save demande les champs obligatoires même si elle est disponible à partir de post. Auparavant utilisait tag et tout fonctionnait bien et capable de faire CRUD fonctionnalité complète. Maintenant, je voulais mettre en œuvre la validation et le code amélioré de tag à form; après les changements je ne pouvais pas effectuer save ou update. Pour l'affichage, j'utilise la syntaxe .volt pour afficher form.Phalcon enregistrer impossible d'effectuer

toujours obtenir un message d'erreur comme « Le nom est obligatoire » même si son codée en dur.

Qu'est-ce qui aurait pu se passer?

Modèle:

<?php 
    class Invoicestatus extends \Phalcon\Mvc\Model 
    { 
     protected $id; 
     protected $name; 
     protected $description; 
     public function setId($id) 
     { 
      $this->id = $id; 

      return $this; 
     } 
     public function setName($name) 
     { 
      $this->name = $name; 

      return $this; 
     } 
     public function setDescription($description) 
     { 
      $this->description = $description; 

      return $this; 
     } 
     public function getId() 
     { 
      return $this->id; 
     } 
     public function getName() 
     { 
      return $this->name; 
     } 
     public function getDescription() 
     { 
      return $this->description; 
     } 
     public function initialize() 
     { 
      $this->setSchema("invoice"); 
      $this->setSource("invoicestatus"); 
      $this->hasMany(
       'Id', 
       'Invoice', 
       'InvoiceStatusId', 
       [ 
        'alias' => 'Invoice', 
        'foreignKey' => [ 
         'message' => 'The invoice status cannot be deleted because other invoices are using it', 
        ] 
       ] 
      ); 
     } 
     public function getSource() 
     { 
      return 'invoicestatus'; 
     } 
     public static function find($parameters = null) 
     { 
      return parent::find($parameters); 
     } 
     public static function findFirst($parameters = null) 
     { 
      return parent::findFirst($parameters); 
     } 
    } 
    ?> 

Controller:

<?php 
    $form = new InvoicestatusForm(); 
    $invoicestatus = new Invoicestatus(); 
    $data = $this->request->getPost(); 

    if (!$form->isValid($data, $invoicestatus)) { 
     $messages = $form->getMessages(); 

     foreach ($messages as $message) { 
      $this->flash->error($message); 
     } 

     return $this->dispatcher->forward(
      [ 
       "action"  => "new", 
      ] 
     ); 
    } 
    //$invoicestatus->name = $this->request->getPost('name', 'string'); 
    //$invoicestatus->description = $this->request->getPost('description', 'string'); 
    //$success = $invoicestatus->save(); 
    $success = $invoicestatus->save($data, array('name', 'description')); 
    if($success) 
    { 
     $form->clear(); 
     $this->flash->success("Invoice Status successfully saved!"); 
     $this->dispatcher->forward(['action' => 'index']); 
    } 
    else 
    { 
     $this->flash->error("Following Errors occured:"); 
     foreach($invoicestatus->getMessages() as $message) 
     { 
      $this->flash->error($message); 
     } 
     $this->dispatcher->forward(['action' => 'new']); 
    } 
    ?> 

Forme:

<?php 
    class InvoicestatusForm extends Form 
    { 
     public function initialize($entity = null, $options = null) 
     { 
      if (isset($options['edit']) && $options['edit']) { 
       $id = new Hidden('id'); 
      } else { 
       $id = new Text('id'); 
      } 
      $this->add($id); 
      $name = new Text('name', ['placeholder' => 'Name']); 
      $name->setFilters(["striptags","string",]); 
      $name->addValidators([new PresenceOf(["message" => "Name is required...",])]); 
      $this->add($name); 
      $description = new Text('description', ['placeholder' => 'Description']); 
      $this->add($description); 
     } 
    } 
    ?> 
+0

Une solution est d'aller dans votre base de données et définir la colonne NULL plutôt que NOT NULL. – Ultimater

+0

Vous pouvez également vérifier '$ this-> request-> getPost()' contient des données. – Ultimater

+0

@Ultimater 'post' renvoie des valeurs. De plus, je ne veux pas autoriser les valeurs nulles dans DB. –

Répondre

0

Il ne s'agit pas de nullValidations qui se produisent avant la validation et lors de la sauvegarde. Vous pouvez soit définir NULL de type colonne dans la base de données ou désactiver notNullValidations par:

Model::setup(
    [ 
     'notNullValidations' => false, 
    ] 
); 
+0

Question? Je ne veux pas autoriser les valeurs NULL dans la base de données. Est-ce la seule façon de faire? –

+0

Aussi, je n'essaie pas de stocker des valeurs NULL lorsque j'obtiens l'erreur –

+0

Si vous ne définissez aucune valeur à la propriété - alors c'est null par défaut. – Juri