从Zend Framework 2中的控制台操作重定向


Redirect from a console action in Zend Framework 2

我正试图使用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,它将按预期工作。

不需要将请求重定向到Doctrine的CLI界面,您可以使用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路由,它是传递给条令命令行脚本的命令。我猜你实际上并不想重定向,你只是想运行条令命令运行的内容。这可能是可能的,但需要在条令代码中进行一些挖掘。