ZF2 setTranslator 上的致命控制台错误
ZF2 Fatal console error on setTranslator
我的 cli 控制器向我抛出一个翻译错误。
Fatal error: Call to undefined method Zend\Mvc\Router\Console\SimpleRouteStack::setTranslator() in ..
出错的函数
设置路由转换器
public function onPreRoute($e)
{
$application = $e->getTarget();
$serviceManager = $application->getServiceManager();
$serviceManager->get('router')->setTranslator($serviceManager->get('translator'));
}
通过这个 git 问题跟踪器,我注意到存在一个问题,因为它不兼容。我的问题是,我怎样才能阻止 cli 模块尝试设置翻译器,因为它现在会抛出一个致命错误。
Git url: https://github.com/doctrine/DoctrineORMModule/issues/333
谢谢
我遇到过一次这个问题,因为 CLI 请求路由与标准请求对象不同(很明显)
所以Zend\Http\Request
不等于Zend\Console\Request
不是同一个模块,另外,event不是同一个结构,event如果实现相同的接口,有些方法是不存在的。
Zend\Http\Request extends AbstractMessage
(这个扩展了消息)
Zend\Console\Request extends Message
直接。
你的问题就是一个很好的例子,我们也可以谈谈
$request->getUri()
这也行不通。
为了防止这种情况发生,我有一个解决方案,虽然没有我想要的那么优雅,但它确实有效。如果有人有更优雅的解决方案,欢迎分享。
所以解决方案是:
if (php_sapi_name() !== 'cli' && $request->getServer('HTTP_X_FORWARDED_FOR', false)) {
// Your code that not compliant with console routes
}
您也可以使用这个条件语句:
if (!($request instanceof \Zend\Console\Request) and !$request->isXmlHttpRequest()) {
// Your code that not compliant with console routes or ajax calls
}
为了找到这个解决方案,我受到了 Zend 骨架应用程序的启发。 In their index.php 他们这样做了 :
if (php_sapi_name() === 'cli-server') {
$path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if (__FILE__ !== $path && is_file($path)) {
return false;
}
unset($path);
}
我刚看到自从我第一次下载它以来他们做了一些改变 ;)
我的 cli 控制器向我抛出一个翻译错误。
Fatal error: Call to undefined method Zend\Mvc\Router\Console\SimpleRouteStack::setTranslator() in ..
出错的函数
设置路由转换器
public function onPreRoute($e)
{
$application = $e->getTarget();
$serviceManager = $application->getServiceManager();
$serviceManager->get('router')->setTranslator($serviceManager->get('translator'));
}
通过这个 git 问题跟踪器,我注意到存在一个问题,因为它不兼容。我的问题是,我怎样才能阻止 cli 模块尝试设置翻译器,因为它现在会抛出一个致命错误。
Git url: https://github.com/doctrine/DoctrineORMModule/issues/333
谢谢
我遇到过一次这个问题,因为 CLI 请求路由与标准请求对象不同(很明显)
所以Zend\Http\Request
不等于Zend\Console\Request
不是同一个模块,另外,event不是同一个结构,event如果实现相同的接口,有些方法是不存在的。
Zend\Http\Request extends AbstractMessage
(这个扩展了消息)
Zend\Console\Request extends Message
直接。
你的问题就是一个很好的例子,我们也可以谈谈
$request->getUri()
这也行不通。
为了防止这种情况发生,我有一个解决方案,虽然没有我想要的那么优雅,但它确实有效。如果有人有更优雅的解决方案,欢迎分享。
所以解决方案是:
if (php_sapi_name() !== 'cli' && $request->getServer('HTTP_X_FORWARDED_FOR', false)) {
// Your code that not compliant with console routes
}
您也可以使用这个条件语句:
if (!($request instanceof \Zend\Console\Request) and !$request->isXmlHttpRequest()) {
// Your code that not compliant with console routes or ajax calls
}
为了找到这个解决方案,我受到了 Zend 骨架应用程序的启发。 In their index.php 他们这样做了 :
if (php_sapi_name() === 'cli-server') {
$path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if (__FILE__ !== $path && is_file($path)) {
return false;
}
unset($path);
}
我刚看到自从我第一次下载它以来他们做了一些改变 ;)