1

Phalconsave功能正在询问必填字段,即使它可以从post. 以前正在使用tag,一切正常,能够完成完整的CRUD功能。现在我想实现验证和升级代码tagform;更改后我无法执行saveupdate。对于视图,我使用.volt语法来呈现form.

即使它是硬编码的,也总是收到错误消息“需要名称” 。

可能出了什么问题?

模型:

<?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);
        }
    }
    ?>
4

1 回答 1

2

这不是在验证之前和保存时发生的 notNullValidations。您可以在数据库中设置列类型 NULL 或通过以下方式禁用 notNullValidations:

Model::setup(
    [
        'notNullValidations' => false,
    ]
);
于 2017-10-08T10:02:11.760 回答