zf2: wie man Service Locator im Modell

Ich habe versucht, einige Ideen von anderen Beiträgen und Beispielen, aber ich habe immer noch keine Lösung.
Ich kann nicht erhalten die servicelocator in meinem Modell.

meine Module.php enthält die folgenden Fabrik in function getServiceConfig():

'Backend\Model\Beuser' => function($sm){
                     $serviceLocator = $sm->getServiceLocator();
                     return new \Backend\Model\Beuser($serviceLocator); 
               },

mein Modell Beuser.php sieht aus wie:

namespace Backend\Model;

use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;


use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class Beuser implements ServiceLocatorAwareInterface
{

    public $idx_be_user;
    public $be_user_email;
    public $be_user_password;
    public $be_user_firstname;
    public $be_user_lastname;
    public $be_user_phone;
    public $be_user_photo;
    public $be_user_shorttext;

     protected $inputFilter;    

     protected $serviceLocator;

    public function setServiceLocator(ServiceLocatorInterface $sl)
    {
        $this->serviceLocator = $sl;
        return $this;
    }

    public function getServiceLocator()
    {
        return $this->serviceLocator;
    }

    public function exchangeArray($data)
    {

        $this->idx_be_user          = (!empty($data['idx_be_user'])) ? $data['idx_be_user'] : null;
        $this->be_user_email        = (!empty($data['be_user_email'])) ? $data['be_user_email'] : null;
        $this->be_user_password  = (!empty($data['be_user_password'])) ? $data['be_user_password'] : null;
        $this->be_user_firstname = (!empty($data['be_user_firstname'])) ? $data['be_user_firstname'] : null;
        $this->be_user_lastname  = (!empty($data['be_user_lastname'])) ? $data['be_user_lastname'] : null;
        $this->be_user_phone        = (!empty($data['be_user_phone'])) ? $data['be_user_phone'] : null;
        $this->be_user_photo        = (!empty($data['be_user_photo'])) ? $data['be_user_photo'] : null;
        $this->be_user_shorttext = (!empty($data['be_user_shorttext'])) ? $data['be_user_shorttext'] : null;

    }

     public function getArrayCopy()
    {
        return get_object_vars($this);
    }

     public function setInputFilter(InputFilterInterface $inputFilter)
    {
        throw new \Exception("Not used");
    }

    public function getInputFilter()
    {

         var_dump($this->getServiceLocator());
         die();
        if (!$this->inputFilter) {
            $inputFilter = new InputFilter();
            $factory     = new InputFactory();

            $inputFilter->add($factory->createInput(array(
                'name'     => 'idx_be_user',
                'required' => true,
                'filters'  => array(
                    array('name' => 'Int'),
                ),
            )));

            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_email',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                         /*
                          array(
                              'name'    => 'Db\NoRecordExists',
                              'options' => array(
                                    'table'     => 'users',
                                        'field'     => 'email',
                            //     'adapter'   => $this->getServiceLocator()->get('dbAdapter'),
                              ),
                         ), 
                          */

                ),
            )));

            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_password',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 6,
                            'max'      => 100,
                        ),
                    ),  
                ),
            )));

            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_firstname',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
            )));

            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_lastname',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
            )));

            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_phone',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
            )));


                $inputFilter->add(
                $factory->createInput(array(
                    'name'     => 'be_user_photo',
                    'required' => false,
                ))
            );


            $inputFilter->add($factory->createInput(array(
                'name'     => 'be_user_shorttext',
                'required' => false,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 5,
                            'max'      => 255,
                        ),
                    ),
                ),
            )));

            $this->inputFilter = $inputFilter;
        }

        return $this->inputFilter;
    }

}

Aber
var_dump($this->getServiceLocator());
gibt NULL zurück. Das ist die reasion warum jeder Aufruf von $this->getServiceLocator()->get('something')
erstellt eine
PHP Fatal error: Call to a member function get()[...]

Könnten Sie mir helfen zu finden das problem?

PS: ich habe auch versucht, folgende Werk:

 'Backend\Model\Beuser' => function($sm){
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
        $beuser = new \Backend\Model\Beuser();
        $beuser->setDbAdapter($dbAdapter);
        return $beuser;
    },

meine module.php:

namespace Backend;

use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Authentication\Storage;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Authentication\AuthenticationService;
use Zend\Authentication\Adapter\DbTable as AuthAdapter;
use Zend\Authentication\Result as Result;
use Zend\Session\Container; //We need this when using sessions

//Be User
use Backend\Model\Beuser;
use Backend\Model\BeuserTable;


class Module implements AutoloaderProviderInterface
{

    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 getConfig()
    {
    return include __DIR__ . '/config/module.config.php';
    }

    public function getServiceConfig()
   {
        return array(

               //factories
            'factories'=>array(

                    //Storage
                   'BackendStorage' => function($sm){
                        return new BackendStorage('backend'); 
                    },                   
                    //DB Adapter
                    'dbAdapter' => function($sm) {          
                         $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');                       
                         return $dbAdapter;                      
               },                             
                    //nur DB
                    'db'  => function($sm) {
                        $dba= $sm->get('dbAdapter');
                        $db = new db\Db($dba);
                        return $db;
                    },                   
                    //mache Auth Info verfuegbar                            
                    'AuthService' => function($sm) {    
                        //$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');                                             
                        $dbTableAuthAdapter  = new AuthAdapter($sm->get('dbAdapter'),'tbl_be_user','be_user_email','be_user_password', 'MD5(?)');               
                        //$authService = new AuthenticationService();               
                        $authService = new AuthenticationService(new Storage\Session('Auth_Backend'));
                        $authService->setAdapter($dbTableAuthAdapter);
                        return $authService;                    

                    },  
                    //Navigation
                    'NavigationFactory' => 'Backend\Service\NavigationFactory', 

                    //Backend User       
                    'Backend\Model\BeuserTable' =>  function($sm) {
                    $tableGateway = $sm->get('BeuserTableGateway');
                    $table = new BeuserTable($tableGateway);
                    return $table;
                },                              
               'BeuserTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('dbAdapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Beuser());
                    return new TableGateway('tbl_be_user', $dbAdapter, null, $resultSetPrototype);
                },  

                    'Backend\Model\Beuser' => function($sm){
                        $model = new \Backend\Model\Beuser(); 
                        $model->setServiceLocator($sm);

                        return $model;
                    },

            ),



        );                

    }

     public function getViewHelperConfig()
    {
        return array(
            'invokables' => array(
                'PageTitle' => 'Backend\ViewHelper\PageTitle',  
            ),
            'factories' => array(
                 //hasIdentity true or false
                 'AuthStatusFactory' => function ($serviceManager) {
                      //Get the service locator 
                $serviceLocator = $serviceManager->getServiceLocator();
                //pass it to your helper 
                return new \Backend\ViewHelper\AuthStatusFactory($serviceLocator);
             },
                 'BeUserName' => function ($serviceManager) {
                      //Get the service locator 
                $serviceLocator = $serviceManager->getServiceLocator();
                //pass it to your helper 
                return new \Backend\ViewHelper\BeUserName($serviceLocator);
            },
            ) 
        );
    }


}
InformationsquelleAutor christiana83 | 2013-07-03
Schreibe einen Kommentar