无法将Zend \ Db \ Adapter \ Adapter实例注入我的表单模型

时间:2014-05-02 18:57:45

标签: php oop zend-framework2

我正在关注这个tutorial,这解释了一些方法(我正在做他列出的第一个)并且我遇到了一些麻烦。

我的表单有Zend \ Form \ Element \ Select使用DB中的值填充。按照教程我有这个是我的控制器:

...
//So form can pull select list options from DB
$dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
var_dump($dbAdapter); //debug
$form = new UpdateForm($dbAdapter);
...

这在我的表单模型中:

...
use Zend\Db\Adapter\AdapterInterface;

class UpdateTicketForm extends Form {
    protected $dbAdapter;

    protected function setDbAdapter(AdapterInterface $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
        return $this;
    }

    protected function getDbAdapter() {
        return $this->dbAdapter;
    }

    public function __construct($name = null,AdapterInterface $dbAdapter) {
        $this->setDbAdapter($dbAdapter);
        parent::__construct('updateForm');
...

当我运行它时,我可以看到转储到屏幕上的$ dbAdapter似乎有效,但我仍然收到错误:

object(Zend\Db\Adapter\Adapter)#267 (5) { ["driver":protected]=> object(Zend\Db\Adapter\Driver\Pdo\Pdo)#268 (4) { [...

Catchable fatal error: Argument 2 passed to MyModule\Form\UpdateForm::__construct() must implement interface Zend\Db\Adapter\AdapterInterface, none given, called in ...Controller\MyController.php on line 73 and defined in ...\Form\UpdateForm.php on line 20

编写本教程的人也发布了他的source,我看了之后仍然无法确定代码的问题(对应于他的代码中的“form-db-adapter”方法)< / p>

这个问题可能是什么原因?

2 个答案:

答案 0 :(得分:1)

UpdateForm的construtoer需要两个参数$ name和$ adapter,如下所示。

public function __construct($name = null, AdapterInterface $dbAdapter) {

}

因此,您应该在创建UpdateForm()实例时传递两个参数,如下所示。

$form = new UpdateForm('formName', $dbAdapter);

如果您只想传递$ dbAdapter作为参数,请将UpdateForm的构造函数更改为此。

public function __construct(AdapterInterface $dbAdapter, $name = null) {

}

答案 1 :(得分:0)

您的表单期望DBAdapter作为第二个参数,第一个参数是表单名称。 请尝试以下操作:

$form = new UpdateForm('myform', $dbAdapter);