从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()。
希望它有帮助。
答
orm:schema-tool:create
不是ZF2路由,它是您传递给Doctrine命令行脚本的命令。我猜你实际上不想重定向,你只是想运行doctrine命令运行的内容。这可能是可能的,但是需要在Doctrine代码中进行一些挖掘。
+0
挖掘正是我希望避免的!在我看来,应该有一个更自然的方式来做到这一点... – 2014-11-07 06:11:51
我会试试这个,谢谢:)还是我觉得很奇怪,你可以重定向一个标准的mvc请求,而不是从控制台中的一个... – 2014-11-08 18:11:53