php - Adapter Db\NoRecordExists Error [Zend 2] -
catchable fatal error: argument 1 passed zend\validator\db\abstractdb::setadapter() must instance of zend\db\adapter\adapter, null given, called in /home2/mapasgua/vendor/zendframework/zendframework/library/zend/validator/abstractvalidator.php on line 142 , defined in /home2/mapasgua/vendor/zendframework/zendframework/library/zend/validator/db/abstractdb.php on line 168
module.php
<?php namespace user; use zend\mvc\mvcevent; use zend\mvc\moduleroutelistener; use user\model\userstable; use user\model\users; class module { public function onbootstrap(mvcevent $e) { ini_set('date.timezone', 'america/sao_paulo'); $e->getapplication()->getservicemanager()->get('translator'); $eventmanager = $e->getapplication()->geteventmanager(); $moduleroutelistener = new moduleroutelistener(); $moduleroutelistener->attach($eventmanager); $e->getapplication()->geteventmanager()->getsharedmanager()->attach('zend\mvc\controller\abstractactioncontroller', 'dispatch', function($e) { $controller = $e->gettarget(); $controllerclass = get_class($controller); $modulenamespace = substr($controllerclass, 0, strpos($controllerclass, '\\')); $config = $e->getapplication()->getservicemanager()->get('config'); if (isset($config['module_layouts'][$modulenamespace])) { $controller->layout($config['module_layouts'][$modulenamespace]); } }, 100); } public function getautoloaderconfig() { return array( // 'zend\loader\classmapautoloader' => array( // __dir__ . '/autoload_classmap.php', // ), 'zend\loader\standardautoloader' => array( 'namespaces' => array( __namespace__ => __dir__ . '/src/' . __namespace__, ), ), ); } public function getserviceconfig() { return array( 'factories' => array( 'user\model\userstable' => function($sm) { $dbadapter = $sm->get('zend\db\adapter\adapter'); $table = new userstable($dbadapter); return $table; }, 'user\model\users' => function($sm) { $dbadapter = $sm->get('zend\db\adapter\adapter'); $users = new users(); $users->setdbadapter($dbadapter); return $users; }, ), ); } public function getconfig() { return include __dir__ . '/config/module.config.php'; } }
users.php
<?php namespace user\model; use zend\inputfilter\inputfilter; use zend\inputfilter\factory inputfactory; use zend\inputfilter\inputfilterinterface; use zend\inputfilter\inputfilterawareinterface; use zend\db\adapter\adapter; use zend\validator\db\abstractdb; class users implements inputfilterawareinterface { public $id; public $name; public $username; public $password; protected $inputfilter; public $_dbadapter; public function exchangearray($data) { $this->id = (isset($data['id'])) ? $data['id'] : null; $this->name = (isset($data['name'])) ? $data['name'] : null; $this->username = (isset($data['username'])) ? $data['username'] : null; $this->password = (isset($data['password'])) ? $data['password'] : null; } public function getarraycopy() { return get_object_vars($this); } public function setinputfilter(inputfilterinterface $inputfilter) { throw new \exception("not used"); } public function setdbadapter($dbadapter) { $this->_dbadapter = $dbadapter; } public function getdbadapter() { return $this->_dbadapter; } public function getinputfilter() { if (!$this->inputfilter) { $inputfilter = new inputfilter(); $factory = new inputfactory(); $inputfilter->add($factory->createinput(array( 'name' => 'id', 'required' => true, 'filters' => array( array('name' => 'int'), ), ))); $inputfilter->add($factory->createinput(array( 'name' => 'name', 'required' => true, 'filters' => array( array('name' => 'striptags'), array('name' => 'stringtrim'), ), 'validators' => array( array( 'name' => 'stringlength', 'options' => array( 'encoding' => 'utf-8', 'min' => 3, 'max' => 32, ), ), ), ))); $inputfilter->add($factory->createinput(array( 'name' => 'username', 'required' => true, 'filters' => array( array('name' => 'striptags'), array('name' => 'stringtrim'), ), 'validators' => array( array( 'name' => 'emailaddress', 'options' => array( 'encoding' => 'utf-8', 'min' => 3, 'max' => 32, 'message' => 'endereço de e-mail invalido', ), ), array( 'name' => 'db\norecordexists', 'options' => array( 'table' => 'users', 'field' => 'username', 'adapter' => $this->getdbadapter(), 'exclude' => array( 'field' => 'id', 'value' => !is_null( $this->id ) && !empty( $this->id ) ? $this->id : 0, ), ), ), ), ))); $inputfilter->add($factory->createinput(array( 'name' => 'password', 'required' => true, 'filters' => array( array('name' => 'striptags'), array('name' => 'stringtrim'), ), 'validators' => array( array( 'name' => 'stringlength', 'options' => array( 'encoding' => 'utf-8', 'min' => 3, 'max' => 32, ), ), ), ))); $inputfilter->add($factory->createinput(array( 'name' => 'retype-password', 'required' => true, 'filters' => array( array('name' => 'striptags'), array('name' => 'stringtrim'), ), 'validators' => array( array( 'name' => 'stringlength', 'options' => array( 'encoding' => 'utf-8', 'min' => 3, 'max' => 32, ), ), array( 'name' => 'identical', 'options' => array( 'token' => 'password', //i have tried $_post['password'], doesnt work either ), ), ), ))); $this->inputfilter = $inputfilter; } return $this->inputfilter; } }
usercontroller.php
namespace user\controller;
<?php use zend\mvc\controller\abstractactioncontroller; use zend\authentication\authenticationservice; use zend\authentication\adapter\dbtable authadapter; use zend\authentication\result result; use zend\mail; use user\form\loginform; use user\form\registerform; use user\form\recuperarform; use user\model\users; class usercontroller extends abstractactioncontroller { protected $userstable; public function configaction() { $auth = new authenticationservice(); $form = new registerform(); $identity = null; if ($auth->hasidentity()) { $dados = $this->getuserstable()->getuser($auth->getidentity()); $request = $this->getrequest(); if ($request->ispost()) { $users = new users(); $post = $request->getpost(); $form->setinputfilter($users->getinputfilter()); $form->setdata($post); if ($form->isvalid()) { $users->exchangearray($post); $this->getuserstable()->saveusers($users); $this->flashmessenger()->addmessage("configurações atualizadas com sucesso."); return $this->redirect()->toroute('painel'); } } else { $post = array( 'id' => $dados->id, 'name' => $dados->name, 'username' => $dados->username, ); $form->setdata($post); } } else { return $this->redirect()->toroute('login'); } return array( 'form' => $form, ); }
your problem have defined factory users
don't use it. line $users = new users();
directly instantiates object without using factory.
change to
$users = $this->getservicelocator()->get('user\model\users');
as object relies on zend\db\adapter\adapter
need factory inject you.
Comments
Post a Comment