AsTeR
AsTeR

Reputation: 7541

Running Doctrine2 command-line utility inside Zend Framework2

I've read this tutorial and I've tried to setup Doctrine2 inside a Zend2 project:

  1. I've registered Doctrine2 as a dependency and installed it successfully
  2. I've followed the tutorial to register doctrine entities path in the config in the two modules where I wish to have entities.

    namespace MyNamespace;
    
    return array(
        'doctrine' => array(
            'driver' => array(
                __NAMESPACE__ . '_driver' => array(
                    'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                    'cache' => 'array',
                    'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Doctrine/Entity')
                ),
                'orm_default' => array(
                    'drivers' => array(
                        __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
                    )
                )
            )
        ),
        'view_manager' => array(
            'template_path_stack' => array(
                'PBT' => __DIR__ . '/../view'
            ),
        ),
    );
    
  3. I've declared a pretty simple entity:

    namespace MyNamespace\Doctrine\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    
    class User
    {
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer", name="id");
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $_id;
    
        /**
         * @ORM\Column(type="string", name="email")
         */
        protected $_email;
    
        /**
         * @ORM\Column(type="string", name="passwordHash")
         */
        protected $_passwordHash;
    }
    
  4. I've run some doctrine command hoping that they would create the table in my database:

    ./vendor/bin/doctrine-module migrations:generate
    

Here the errors raised:

    PHP Fatal error:  Uncaught exception 'Zend\Mvc\Router\Exception\RuntimeException' with message 'Given route does not implement Console route interface' in PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/Console/SimpleRouteStack.php:81
Stack trace:
#0 PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/Console/SimpleRouteStack.php(51): Zend\Mvc\Router\Console\SimpleRouteStack->routeFromArray(Array)
#1 PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/SimpleRouteStack.php(140): Zend\Mvc\Router\Console\SimpleRouteStack->addRoute('home', Array)
#2 PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/SimpleRouteStack.php(84): Zend\Mvc\Router\SimpleRouteStack->addRoutes(Array)
#3 [internal function]: Zend\Mvc\Router\SimpleRouteStack::factory(Array)
#4 truncated mention to 'PROJECT_DIR' in PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 860

Fatal error: Uncaught exception 'Zend\Mvc\Router\Exception\RuntimeException' with message 'Given route does not implement Console route interface' in PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 860

Zend\Mvc\Router\Exception\RuntimeException: Given route does not implement Console route interface in PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/Console/SimpleRouteStack.php on line 81

Call Stack:
    0.0001     633648   1. {main}() PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module:0
    0.0458     650288   2. include('PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module.php') PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module:4
    0.1666     878808   3. Zend\Mvc\Application::init() PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module.php:46
    1.6689    5914064   4. Zend\Mvc\Application->bootstrap() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:254
    1.6999    6515856   5. Zend\ServiceManager\ServiceManager->get() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:153
    1.6999    6516648   6. Zend\ServiceManager\ServiceManager->create() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:481
    1.6999    6516648   7. Zend\ServiceManager\ServiceManager->doCreate() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:557
    1.6999    6516728   8. Zend\ServiceManager\ServiceManager->createFromFactory() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:598
    1.7011    6537712   9. Zend\ServiceManager\ServiceManager->createServiceViaCallback() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:983
    1.7011    6538200  10. call_user_func() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:853
    1.7011    6538272  11. Zend\Mvc\Service\RouterFactory->createService() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:853
    1.7013    6540728  12. call_user_func() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Service/RouterFactory.php:65
    1.7058    6689416  13. Zend\Mvc\Router\SimpleRouteStack::factory() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Service/RouterFactory.php:65
    1.7071    6742992  14. Zend\Mvc\Router\SimpleRouteStack->addRoutes() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/SimpleRouteStack.php:84
    1.7071    6743848  15. Zend\Mvc\Router\Console\SimpleRouteStack->addRoute() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/SimpleRouteStack.php:140
    1.7071    6743928  16. Zend\Mvc\Router\Console\SimpleRouteStack->routeFromArray() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Router/Console/SimpleRouteStack.php:51

Zend\ServiceManager\Exception\ServiceNotCreatedException: An exception was raised while creating "Router"; no instance returned in PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 860

Call Stack:
    0.0001     633648   1. {main}() PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module:0
    0.0458     650288   2. include('PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module.php') PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module:4
    0.1666     878808   3. Zend\Mvc\Application::init() PROJECT_DIR/vendor/doctrine/doctrine-module/bin/doctrine-module.php:46
    1.6689    5914064   4. Zend\Mvc\Application->bootstrap() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:254
    1.6999    6515856   5. Zend\ServiceManager\ServiceManager->get() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:153
    1.6999    6516648   6. Zend\ServiceManager\ServiceManager->create() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:481
    1.6999    6516648   7. Zend\ServiceManager\ServiceManager->doCreate() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:557
    1.6999    6516728   8. Zend\ServiceManager\ServiceManager->createFromFactory() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:598
    1.7011    6537712   9. Zend\ServiceManager\ServiceManager->createServiceViaCallback() PROJECT_DIR/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:983

All brilliant or not ideas are welcomed... If you see how to fix the code display in my question, please... feel free!

EDIT : Added the complete errors dump. Please note that everything going through the web is working, just the command line is crashing.

Upvotes: 0

Views: 1799

Answers (2)

Gocha Ossinkine
Gocha Ossinkine

Reputation: 96

This applies to Zend Framework 2.2.1. You can temporarily use a version 2.2.0 or lower.

Upvotes: 4

Ezequiel Muns
Ezequiel Muns

Reputation: 7762

There are at least two errors with you configuration:

  1. First, at the error message states, there is a service called Router being requested from what appears to be a form factory. This is to do with your project configuration and unlikely to have anything to do with Doctrine.

  2. Your entity isn't marked as an entity via the class-level annotation.

To fix #2 you need:

namespace MyNamespace\Doctrine\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class User
{
    /// ...

Upvotes: 1

Related Questions