2012-09-24 13 views
10

के माध्यम से पहुँच का निर्माण मैं zf2 में एक साधारण सेवा है जो मैं viewhelperzf2 सरल सेवा और viewhelper

चरण 1 में उपयोग कर उपयोग कर सकते हैं बनाने के लिए कोशिश कर रहा हूँ। मैं src/आवेदन/सेवा/Service1.php में एक वर्ग craeted है का पालन के रूप में

namespace Application\Service; 
    use Zend\ServiceManager\ServiceLocatorAwareInterface; 
    use Zend\ServiceManager\ServiceLocatorInterface; 

    class Service1 implements ServiceLocatorAwareInterface 
    { 

     public function __construct() 
     { 

     } 

     public function setServiceLocator(ServiceLocatorInterface $serviceLocator) 
     { 

     }  

     public function getServiceLocator() 
     { 

     } 

    } 

चरण 2 मैं इस module.php फ़ाइल में नीचे के रूप में की स्थापना की।

public function getServiceConfig() 
{  
    return array(
     'factories' => array(
      'Application\Service\Service1' => function ($sm) { 
       return new \Application\Service\Service1($sm); 
      }, 
     ) 
    ); 
} 

public function onBootstrap($e) 
{   
    $serviceManager = $e->getApplication()->getServiceManager(); 

    $serviceManager->get('viewhelpermanager')->setFactory('Abc', function ($sm) use ($e) { 
     return new \Application\View\Helper\Abc($sm); 
    }); 
} 

चरण 3 अंत में मैं यह मेरे विचार सहायक src/आवेदन/देखें/हेल्पर/Abc.php परीक्षा में geting हूँ() इस तरह विधि, द्वितीय टिप्पणी इस लाइन $this->sm->get('Application\Service\Service1'); कोई त्रुटि है, वहाँ होना चाहिए कुछ जो मैं सेवा में लापता हूं?

namespace Application\View\Helper; 

use Zend\View\Helper\AbstractHelper; 

    class Abc extends AbstractHelper 
    { 
     protected $sm; 

     public function test() 
     { 
      $this->sm->get('Application\Service\Service1'); 
     } 
     public function __construct($sm) { 
      $this->sm = $sm; 

     } 
    } 

चरण 4 तो मैं इस तरह दृश्य में से एक में अपने परीक्षण दृश्य सहायक बोल रहा हूँ।

$this->Abc()->test(); 

मुझे निम्न त्रुटि मिल रही है।

Fatal error: Call to undefined method Application\Service\Service1::setView() in vendor/zendframework/zendframework/library/Zend/View/HelperPluginManager.php on line 127 Call Stack: 

मुझे क्या याद आ रही है? module.config.php की

निकालने:

+0

कृपया कुछ और (असली) कोड दिखाएं। ऐसा लगता है कि आप 'एबीसी' के बजाय कहीं भी 'सेवा 1' उदाहरण वापस कर रहे हैं। इस प्रकार, व्यू हेल्पर तंत्र 'सेवा 1' उदाहरण में दृश्य उदाहरण को इंजेक्ट करने का प्रयास करता है। –

+0

मैंने सेवा 1 से My1serve में नाम और प्रत्येक संदर्भ बदल दिया है, लेकिन फिर भी वही त्रुटि प्राप्त हो रही है अपरिभाषित विधि My1serve :: setView() पर कॉल करें। मैंने अपने कोड में कहीं भी My1serve नाम का उपयोग नहीं किया है, जिसे मैंने पहले से ही प्रश्न में दिखाया है। – Developer

+0

समस्या के लिए पूरी तरह फिट बैठता है। हम थोड़ी अधिक जानकारी के बिना आपकी मदद नहीं कर पाएंगे। –

उत्तर

5

परिवर्तन नीचे दी गई विधि में लाइन $this->sm->getServiceLocator()->get('Application\Service\Service1');

class Abc extends AbstractHelper 
{ 
    protected $sm; 

    public function test() 
    { 
     $this->sm->getServiceLocator()->get('Application\Service\Service1'); 
    } 
    public function __construct($sm) { 
     $this->sm = $sm; 

    } 
} 
7

एक वैकल्पिक, पीएचपी 5.4 में केवल, विशिष्ट विन्यास के बिना, उपयोग करने के लिए traits होगा

'view_helpers' => array(
    'invokables' => array(
     'myHelper' => 'Application\View\Helper\MyHelper', 
    ), 

MyHelper.php:

<?php 
namespace Application\View\Helper; 

use Zend\ServiceManager\ServiceLocatorAwareInterface; 

class HeadScript extends \Zend\View\Helper\MyHelper implements ServiceLocatorAwareInterface 
{ 
    use \Zend\ServiceManager\ServiceLocatorAwareTrait; 

    public function __invoke() 
    { 
     $config = $this->getServiceLocator()->getServiceLocator()->get('Config'); 
     // do something with retrived config 
    } 

} 
संबंधित मुद्दे