Zend php中的Zend \ ServiceManager \ Exception \ ServiceNotCreatedException

时间:2015-01-13 01:50:40

标签: php zend-framework zend-framework2 service-locator

我有一个网络工具,它在服务器上运行,但我有一个错误,所以我试图让它的本地副本进行调试。 问题是,当我尝试在本地运行该工具时它工作正常,但有些功能不是。

当我单击要在表单上重定向的添加按钮时,这是函数调用

 public function addAction()
{
    $pdpFormId = $this->params()->fromRoute('id', null);
    $category = $this->params()->fromRoute('category', self::CATEGORY70);

    if (empty($pdpFormId)) {
        return $this->redirect()->toRoute('pdp');
    }

    $form = $this->getObjectiveForm();
    $form->get('fsPdpObjective')->get('pdp_form_id')->setValue($pdpFormId);
    $form->get('fsPdpObjective')->get('category')->setValue($category);
    $form->get('cancel')->setAttribute('formaction', $this->url()->fromRoute('pdp'));

    $request = $this->getRequest();
    if ($request->isPost()) {
        $objective = new Objective();
        $form->setData($request->getPost());

        if ($form->isValid()) {
            $data = $form->getData();
            $objective->exchangeArray($data["fsPdpObjective"]);

            $objectiveTable = $this->getObjectiveTable();
            $objectiveTable->saveObjective($objective);

            return $this->redirect()->toRoute('pdp');
        }
    }

当它试图调用此函数时:

public function getObjectiveForm()
{
    if (!$this->objectiveForm) {
        $this->setObjectiveForm($this->getServiceLocator()->get('PdpObjectiveForm'));
    }
    return $this->objectiveForm;
}

更新了I包括整个堆栈跟踪和例外 它会返回此错误

  

#0 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(985): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Object(Closure), 'pdpobjectivefor...', 'PdpObjectiveFor...')
#1 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(598): Zend\ServiceManager\ServiceManager->createFromFactory('pdpobjectivefor...', 'PdpObjectiveFor...')
#2 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(557): Zend\ServiceManager\ServiceManager->doCreate('PdpObjectiveFor...', 'pdpobjectivefor...')
#3 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(481): Zend\ServiceManager\ServiceManager->create(Array)
#4 C:\Xampp\htdocs\atp\module\Pdp\src\Pdp\Controller\PdpController.php(259): Zend\ServiceManager\ServiceManager->get('PdpObjectiveFor...')
#5 C:\Xampp\htdocs\atp\module\Pdp\src\Pdp\Controller\PdpController.php(132): Pdp\Controller\PdpController->getObjectiveForm()
#6 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Controller\AbstractActionController.php(83): Pdp\Controller\PdpController->addAction()
#7 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#8 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#9 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#10 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Controller\AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#11 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#12 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#13 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#14 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#15 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Application.php(309): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#16 C:\Xampp\htdocs\atp\public\index.php(15): Zend\Mvc\Application->run()
#17 {main}

以前的例外:

Zend\I18n\Exception\ExtensionNotLoadedException

File:

    C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\I18n\Validator\Float.php:49

Message:

    Zend\I18n\Validator component requires the intl PHP extension

Stack trace:

    #0 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\AbstractPluginManager.php(170): Zend\I18n\Validator\Float->__construct()
    #1 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(602): Zend\ServiceManager\AbstractPluginManager->createFromInvokable('float', 'Float')
    #2 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(557): Zend\ServiceManager\ServiceManager->doCreate('Float', 'float')
    #3 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(481): Zend\ServiceManager\ServiceManager->create(Array)
    #4 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\AbstractPluginManager.php(103): Zend\ServiceManager\ServiceManager->get('Float', true)
    #5 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Validator\ValidatorChain.php(82): Zend\ServiceManager\AbstractPluginManager->get('Float', Array)
    #6 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Validator\ValidatorChain.php(149): Zend\Validator\ValidatorChain->plugin('Float', Array)
    #7 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\InputFilter\Factory.php(374): Zend\Validator\ValidatorChain->attachByName('Float', Array, false)
    #8 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\InputFilter\Factory.php(244): Zend\InputFilter\Factory->populateValidators(Object(Zend\Validator\ValidatorChain), Array)
    #9 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\InputFilter\InputFilter.php(61): Zend\InputFilter\Factory->createInput(Array)
    #10 C:\Xampp\htdocs\atp\module\Pdp\src\Pdp\Form\ObjectiveFilter.php(41): Zend\InputFilter\InputFilter->add(Array)
    #11 C:\Xampp\htdocs\atp\module\Pdp\Module.php(48): Pdp\Form\ObjectiveFilter->__construct()
    #12 [internal function]: Pdp\Module->Pdp\{closure}(Object(Zend\ServiceManager\ServiceManager), 'pdpobjectivefor...', 'PdpObjectiveFor...')
    #13 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(853): call_user_func(Object(Closure), Object(Zend\ServiceManager\ServiceManager), 'pdpobjectivefor...', 'PdpObjectiveFor...')
    #14 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(985): Zend\ServiceManager\ServiceManager->createServiceViaCallback(Object(Closure), 'pdpobjectivefor...', 'PdpObjectiveFor...')
    #15 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(598): Zend\ServiceManager\ServiceManager->createFromFactory('pdpobjectivefor...', 'PdpObjectiveFor...')
    #16 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(557): Zend\ServiceManager\ServiceManager->doCreate('PdpObjectiveFor...', 'pdpobjectivefor...')
    #17 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\ServiceManager\ServiceManager.php(481): Zend\ServiceManager\ServiceManager->create(Array)
    #18 C:\Xampp\htdocs\atp\module\Pdp\src\Pdp\Controller\PdpController.php(259): Zend\ServiceManager\ServiceManager->get('PdpObjectiveFor...')
    #19 C:\Xampp\htdocs\atp\module\Pdp\src\Pdp\Controller\PdpController.php(132): Pdp\Controller\PdpController->getObjectiveForm()
    #20 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Controller\AbstractActionController.php(83): Pdp\Controller\PdpController->addAction()
    #21 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
    #22 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
    #23 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #24 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Controller\AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #25 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
    #26 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
    #27 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
    #28 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #29 C:\Xampp\htdocs\atp\vendor\ZF2\library\Zend\Mvc\Application.php(309): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #30 C:\Xampp\htdocs\atp\public\index.php(15): Zend\Mvc\Application->run()
    #31 {main}

这是客观形式

class Objective extends Form
{
    public function __construct()
    {
        parent::__construct('pdpObjective');

        $this->setName('pdpObjectiveForm');
        $this->setAttribute('method', 'post');

        $this->add(array(
            'name' => 'fsPdpObjective',
            'type' => 'Zend\Form\Fieldset',
            'options' => array(
                'legend' => 'PDP Objective Details'
            ),
            'elements' => array(
                // ID
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Hidden',
                        'name' => 'id',
                    ),
                ),
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Hidden',
                        'name' => 'pdp_form_id',
                    ),
                ),
                // Category
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Select',
                        'name' => 'category',
                        'options' => array(
                            'label' => 'Category',
                            'value_options' => array(
                                '1' => '70 - On The Job Training',
                                '2' => '20 - Coaching/Mentoring',
                                '3' => '10 - Formal Training'
                            ),
                        ),
                    ),
                ),
                // Development Activity
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Text',
                        'name' => 'activity',
                        'options' => array(
                            'label' => 'Development Activity'
                        ),
                    ),
                ),
                // Description
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Textarea',
                        'name' => 'description',
                        'options' => array(
                            'label' => 'Description'
                        ),
                    ),
                ),
                // Estimated Cost
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Text',
                        'name' => 'cost',
                        'options' => array(
                            'label' => 'Estimated Cost'
                        ),
                    ),
                ),
                // Start Date
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Text',
                        'name' => 'start',
                        'options' => array(
                            'label' => 'Start Date',
                            'readonly' => true,
                            'hint' => '(yyyy-mm-dd)',
                        ),
                    ),
                ),
                // Due Date
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Text',
                        'name' => 'due',
                        'options' => array(
                            'label' => 'Due Date',
                            'hint' => '(yyyy-mm-dd)',
                        ),
                    ),
                ),
                // Priority
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Select',
                        'name' => 'priority',
                        'options' => array(
                            'label' => 'Priority',
                            'value_options' => array(
                                '1' => 'Critical (in present position)',
                                '2' => 'Important for the Growth (in present position)',
                                '3' => 'Helpful for Career Growth (3-5 years)'),
                        ),
                    ),
                ),
                // Status
                array(
                    'spec' => array(
                        'type' => 'Zend\Form\Element\Select',
                        'name' => 'status',
                        'options' => array(
                            'label' => 'Status',
                            'value_options' => array(
                                '1' => 'Not Started',
                                '2' => 'Ongoing',
                                '3' => 'Completed',
                                '4' => 'No Longer Applicable'
                            ),
                        ),
                    ),
                ),
            ),
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Csrf',
            'name' => 'csrf'
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Submit',
            'name' => 'submit',
            'attributes' => array(
                'value' => 'Save Changes',
                'class' => 'btn-primary btn-large',
            ),
        ));

        $this->add(array(
            'type' => 'Zend\Form\Element\Submit',
            'name' => 'cancel',
            'attributes' => array(
                'value' => 'Cancel'
            ),
        ));
    }
}
希望有人可以帮助我。提前谢谢!

已更新

这是pdp模块的整个module.config

class Module implements AutoloaderProviderInterface, ServiceProviderInterface
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
            // if we're in a namespace deeper than one level we need to fix the \ in the path
                    __NAMESPACE__ => __DIR__ . '/src/' . str_replace('\\', '/' , __NAMESPACE__),
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    /* (non-PHPdoc)
     * @see \Zend\ModuleManager\Feature\ServiceProviderInterface::getServiceConfig()
     */
    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'PdpObjectiveForm' => function($sm) {
                    $form = new Form\Objective();
                    $form->setInputFilter(new Form\ObjectiveFilter());
                    return $form;
                },

                'Pdp\Model\PdpTable' => function ($sm) {
                    $tableGateway = $sm->get('PdpTableGateway');
                    $table = new \Pdp\Model\PdpTable($tableGateway);
                    return $table;
                },

                'PdpTableGateway' => function($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new \Pdp\Entity\Pdp());
                    return new TableGateway('pdp_form', $dbAdapter, null, $resultSetPrototype);
                },

                'Pdp\Model\ObjectiveTable' => function($sm) {
                    $tableGateway = $sm->get('PdpObjectiveTableGateway');
                    $table = new \Pdp\Model\ObjectiveTable($tableGateway);
                    return $table;
                },

                'PdpObjectiveTableGateway' => function($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new \Pdp\Entity\Objective());
                    return new TableGateway('pdp_form_objective', $dbAdapter, null, $resultSetPrototype);
                },
            ),
        );
    }

}

1 个答案:

答案 0 :(得分:2)

Zend\I18n\Validator component requires the intl PHP extension

缺少intl php扩展名。我不确定它是如何在Windows上,但我认为它应该与PHP发行版捆绑在一起。所以你需要的是在php.ini中启用它