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);
}
}
?>
Une solution est d'aller dans votre base de données et définir la colonne NULL plutôt que NOT NULL. – Ultimater
Vous pouvez également vérifier '$ this-> request-> getPost()' contient des données. – Ultimater
@Ultimater 'post' renvoie des valeurs. De plus, je ne veux pas autoriser les valeurs nulles dans DB. –