1

Я пытаюсь создать свое первое консольное приложение с помощью Zend Framework 2, используя как фреймворк, так и доктрину, и я пытался создать действие в своем контроллере, которое просто " перенаправить "на другое действие в модуле Doctrine.Перенаправление из действия консоли в Zend Framework 2

Я попытался сделать это как:

public function setupAction() { 
    return $this->redirect()->toRoute('orm:schema-tool:create'); 
} 

, но я получаю

Zend\Mvc\Router\Exception\RuntimeException 
Route with name "orm:schema-tool:create" not found 

однако, если я позвоню действие orm:schema-tool:create непосредственно из командной строки, он работает, как ожидалось.

ответ

1

Вместо того, чтобы перенаправлять запрос на интерфейс CLI Doctrine, вы можете легко добиться такого же эффекта вручную, используя SchemaTool, для этого не требуется слишком много копания.

Например:

use Doctrine\ORM\Tools\SchemaTool; 
use Zend\Mvc\Controller\AbstractConsoleController; 

BarController extends AbstractConsoleController 
{ 
    public function setupAction() { 
     $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); 
     $schemaTool = new SchemaTool($em); 
     $metaData = $em->getMetaDataFactory()->getAllMetaData(); 

     // This will return all SQL queries which needs to run to create schema 
     $sql = $schemaTool->getCreateSchemaSql($metaData); 

     // This will directly execute that queires. 
     $schemaTool->createSchema($metaData); 
    } 
} 

Вы также можете проверять другие методы интерфейсных SchemaTool как updateSchema() и dropSchema().

Надеюсь, что это поможет.

+0

Я попробую это, спасибо :) все же я нахожу довольно странным, что вы можете перенаправить стандартный запрос mvc, а не один из консоли ... –

1

orm:schema-tool:create не является маршрутом ZF2, это команда, которую вы передаете сценарию командной строки Doctrine. Я предполагаю, что вы на самом деле не хотите перенаправлять, вы просто хотите запустить то, что запускает команда doctrine. Это может быть возможно, но потребуется немного копаться в коде Doctrine.

+0

Это копание - именно то, чего я надеялся избежать! Мне кажется, что должен быть более естественный способ сделать это ... –

Смежные вопросы