Zend FrameWork 2 Erhalten ServiceLocator In Form, und füllen Sie eine Dropdown-Liste

Ich brauche, um den adapter aus der form, aber immer noch nicht.

In meinem controller habe ich wiederherstellen können Sie den adapter mit den folgenden:

//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;
}

In meinem Modul habe ich so:

//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;
                    },
            ),
    );
}

Könnte mir jemand ein Beispiel, wie man den adapter auf die Tabelle, aus der Gruppe bilden?

Habe ich diesem Beispiel gefolgt, um meine form Benutzer:
http://framework.zend.com/manual/2.0/en/modules/zend.form.collections.html

BEARBEITET von hier aus...

Vielleicht drückte ich mich falsch, die Frage zu stellen.

Was ich wirklich tun müssen ist, füllen Sie eine auswählen (Drop-Down) mit Daten aus meiner Tabelle Gruppen.

So, ich brauche, um die Leistungen in meinem userForm-Klasse ServiceLocatorAwareInterface (finden Sie unter diesem link) implementiert, da standardmäßig die Zend Framework MVC verwendet wird, registriert es einen Initialisierer, Spritzen Sie in der Dienste-Verwalter Instanz ServiceLocatorAwareInterface Umsetzung für jede Klasse.

Nach dem abrufen der Werte aus der Tabelle Gruppen und füllen Sie die wählen Sie.

Das problem ist, dass von allen Möglichkeiten, die ich habe versucht, das getServiceLocator() Rückgabe:

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

Wollte ich dies in meiner UserForm...

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...

InformationsquelleAutor der Frage JulianoMartins | 2012-09-17

Schreibe einen Kommentar