добрый день . пытаюсь использовать not in database валидатор в zf 2. таким образом .( все по мануалу) config/autoload/global.php PHP: <?php return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=networks;host=localhost', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => function ($serviceManager) { $adapterFactory = new Zend\Db\Adapter\AdapterServiceFactory(); $adapter = $adapterFactory->createService($serviceManager); \Zend\Db\TableGateway\Feature\GlobalAdapterFeature::setStaticAdapter($adapter); return $adapter; } ), ), ); и сама модель PHP: $inputFilter->add($factory->createInput(array( 'name' => 'email', 'filters' => array( array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'Db\NoRecordExists', 'options' => array( 'table' => 'user', 'field' => 'email', 'adapter' => \Zend\Db\TableGateway\Feature\GlobalAdapterFeature::getStaticAdapter() ) ), ), array( 'name' => 'EmailAddress', ), array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 3, 'max' => 90, ), ), ))); получаю ошибку вопрос как получить адаптер базы в модели. 100 способов перепробывал ни один не сработал. подскажите кто делал
получилось только так. config/global.php HTML: <?php if (!defined('CONFIG_DIR')) { define('CONFIG_DIR',__DIR__); } return array( 'db' => array( 'driver' => 'Pdo', 'dsn' => 'mysql:dbname=networks;host=localhost', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => function ($serviceManager) { $adapterFactory = new Zend\Db\Adapter\AdapterServiceFactory(); $adapter = $adapterFactory->createService($serviceManager); \Zend\Db\TableGateway\Feature\GlobalAdapterFeature::setStaticAdapter($adapter); return $adapter; } ), ), 'adapter' => array( 'settings' => array( 'driver' => 'Mysqli', 'database' => 'networks', 'username' => 'root', 'password' => 'root' ) )); в модели добавляем метод HTML: public function getAdapter() { $config = new \Zend\Config\Config(include CONFIG_DIR . '/global.php'); $adapter = new \Zend\Db\Adapter\Adapter (array( 'driver' => $config->adapter["settings"]->driver, 'database' => $config->adapter["settings"]->database, 'username' => $config->adapter["settings"]->username, 'password' => $config->adapter["settings"]->password, )); return $adapter; } и делаем HTML: $inputFilter->add($factory->createInput(array( 'name' => 'email', 'filters' => array( array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'Db\NoRecordExists', 'options' => array( 'table' => 'user', 'field' => 'email', 'adapter' => $this->getAdapter() )) , array( 'name' => 'EmailAddress'), array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 3, 'max' => 90, )), )))); я понимаю что это дикий костыль. но в сети куча костылей и похуже. если кто то найдет способ получше который лично у него заработает. ( способ из мануала не работает) дайте знать пожалуйста. ps модераторы. тэг PHP: удаляет слэши из неймспейсов.
я смотрел. в мануале написано пользоваться статическим адаптором для таких случаев. я смотрел этот метод он работает с другим который по идее должен что то возвращать. но тот метод который должен что то возвращать пустой. возможно версия не стабильна. возможно что я не так понял. я день на это потратил. в принципе в гугле все пользуются разными костылями которые громоздки и работают то тут то там. так что пока что так.