Я пытаюсь создать свое первое консольное приложение, используя 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
прямо из командной строки, работает как положено.
Вместо перенаправления запроса в интерфейс командной строки 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 ().
Надеюсь, поможет.
orm:schema-tool:create
это не маршрут ZF2, это команда, которую вы передаете сценарию командной строки Doctrine. Я предполагаю, что вы на самом деле не хотите перенаправлять, вы просто хотите запустить то, что запускает команда doctrine. Это может быть возможно, но потребуется немного покопаться в коде Доктрины.