Phalcon save
機能は、post
から利用可能な場合でも必須フィールドを要求しています。以前はtag
を使用していましたが、すべてが正常に機能しており、完了するためにはCRUD
の機能を実行できました。今私はtag
からform
への検証とアップグレードされたコードを実装したいと思っていました。変更後に私はsave
またはupdate
を実行できませんでした。私は.volt
の構文を使用してform
を表示しています。 「の名前が必要になる」と Phalconセーブできません
は、必ずエラーメッセージが出場合でも、その ハードコードされました。何が間違っていたでしょうか?
モデル:
<?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);
}
}
?>
コントローラー:
<?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']);
}
?>
フォーム:
<?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);
}
}
?>
この場合、データベーステーブルに入り、NOT NULLではなくNULLに設定することができます。 – Ultimater
'$ this-> request-> getPost()'にデータが入っているかどうかをチェックすることもできます。 – Ultimater
@Ultimater 'post'が値を返しています。また、私はDBにnull値を許可したくありません。 –