Necesito obtener el adaptador del formulario, pero todavía no pude.Zend FrameWork 2 Obtener ServiceLocator en el formulario y completar una lista desplegable
En mi controlador que puedo recuperar el adaptador utilizando la siguiente:
// module/Users/src/Users/Controller/UsersController.php
public function getUsersTable()
{
if (! $this->usersTable) {
$sm = $this->getServiceLocator();
$this->usersTable = $sm->get('Users\Model\UsersTable');
}
return $this->usersTable;
}
En mi módulo de E también lo hizo:
// module/Users/Module.php
public function getServiceConfig()
{
return array(
'factories' => array(
'Users\Model\UsersTable' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$uTable = new UsersTable($dbAdapter);
return $uTable;
},
//I need to get this to the list of groups
'Users\Model\GroupsTable' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$gTable = new GroupsTable($dbAdapter);
return $gTable;
},
),
);
}
Podría alguien darme un ejemplo de cómo obtener el adaptador a la tabla de la forma de grupo?
He seguido este ejemplo para mis usuarios del formulario: http://framework.zend.com/manual/2.0/en/modules/zend.form.collections.html
editar desde aquí ...
Tal vez me he expresado mal para hacer la pregunta.
Lo que realmente tengo que hacer es completar una selección (desplegable) con información de mis grupos de tablas.
por eso es necesario para obtener los servicios dentro de mi clase formUsuario por ServiceLocatorAwareInterface (see this link) implementado porque por defecto, el Zend Framework MVC registra un inicializador que inyectará en la instancia ServiceLocatorAwareInterface ServiceManager La implementación de cualquier clase.
Después de recuperar los valores de los grupos de tablas y completar la selección.
El problema es que de todas las maneras que he probado, la getServiceLocator() devuelve la siguiente:
Call to a member function get() on a non-object in
D:\WEBSERVER\htdocs\Zend2Control\module\Users\src\Users\Form\UsersForm.php
on line 46
justo lo que quería hacer esto en mi formulario de usuario ...
namespace Users\Form;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\Form\Element;
use Zend\Form\Form;
class UsersForm extends Form implements ServiceLocatorAwareInterface
{
protected $serviceLocator;
public function getServiceLocator()
{
return $this->serviceLocator;
}
public function setServiceLocator (ServiceLocatorInterface $serviceLocator)
{
$this->serviceLocator = $serviceLocator;
}
public function __construct ($name = null)
{
parent::__construct('users');
$this->setAttribute('method', 'post');
$sm = $this->getServiceLocator();
$groups = $sm->get('Users\Model\GroupsTable')->fetchAll(); // line 46
$select = new Element\Select('groups');
$options = array();
foreach ($groups as $group) {
$options[$group->id] = $group->name;
}
$select->setValueOptions($options);
$this->add($select);
// and more elements here...
Hola, ¿ha encontrado la solución para esto? –