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

问题描述:

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

无需将请求重定向到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()

希望它有帮助。

+0

我会试试这个,谢谢:)还是我觉得很奇怪,你可以重定向一个标准的mvc请求,而不是从控制台中的一个... – 2014-11-08 18:11:53

orm:schema-tool:create不是ZF2路由,它是您传递给Doctrine命令行脚本的命令。我猜你实际上不想重定向,你只是想运行doctrine命令运行的内容。这可能是可能的,但是需要在Doctrine代码中进行一些挖掘。

+0

挖掘正是我希望避免的!在我看来,应该有一个更自然的方式来做到这一点... – 2014-11-07 06:11:51