Перенаправление с консоли действий в Zend Framework 2

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

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

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

Решение

Вместо перенаправления запроса в интерфейс командной строки 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 ().

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

1

Другие решения

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

1