重命名Zend Framework项目目录后,插件redirect()已停止工作

时间:2018-03-05 14:20:35

标签: redirect zend-framework3 zend-controller-plugin

我想测试我的项目的新设计而不关闭原始设计。 我将整个源目录的副本复制到了新目录。我准备了子域名和目录名如下(这是共享主机):

<pre>
    http://project.mydomain.com/
    /public/user1/project/

    http://project1.mydomain.com
    /public/user1/project1/
</pre>

我在localhost上做的一样(Windows,Apache2.4,php 5.6)。只需将“1”添加到新目录名称并复制源目录的所有内容。 在localhost上,两个“站点”都可以解决任何问题。

但是在共享主机上复制的网站工作正常,直到我尝试使用重定向控件插件。结果我只看到空白页面。它出现在我的所有14个模块中以及我使用过的任何路径中。

示例电话:

<pre>
    public function fakeAction() 
    {        
        if ( $this->getRequest()->isPost() ) 
        {
            return $this->redirect()->toRoute('main');
        }

        return $this->redirect()->toRoute('login');        
    }

</pre>

,其中'main'路由配置为:

<pre>
    return [
        'router' => [
            'routes' => [

                'main' => [
                    'type' => Literal::class,
                    'options' => [
                        'route' => '/',
                        'defaults' => [
                            'controller' => Controller\MainController::class,
                            'action' => 'index'
                        ]
                    ]
                ],
</pre>

其他几个事实:

  • 我没有使用事件(比如MvcEvent :: EVENT_DISPATCH或其他任何事件)
  • 我在Application模块中只有一个onBootsrtap()方法(13个其他模块只不过是Module.php中的getConfig()):

        
        public function onBootstrap ( MvcEvent $event )
        {
            $application = $event->getApplication();
            $serviceManager = $application->getServiceManager();
            $sessionManager = $serviceManager->get( SessionManager::class );
            $sessionManager->start();
        }
    
  • $ this-&gt; redirect() - &gt; toRoute('main')return(恕我直言)正确的对象:

        Zend\Http\PhpEnvironment\Response Object
        (
            [version:protected] => 
            [contentSent:protected] => 
            [recommendedReasonPhrases:protected] => Array
                (
                    [100] => Continue
                    [101] => Switching Protocols
                    [102] => Processing
                    [200] => OK
                    [201] => Created
                    [202] => Accepted
                    [203] => Non-Authoritative Information
                    [204] => No Content
                    [205] => Reset Content
                    [206] => Partial Content
                    [207] => Multi-status
                    [208] => Already Reported
                    [226] => IM Used
                    [300] => Multiple Choices
                    [301] => Moved Permanently
                    [302] => Found
                    [303] => See Other
                    [304] => Not Modified
                    [305] => Use Proxy
                    [306] => Switch Proxy
                    [307] => Temporary Redirect
                    [308] => Permanent Redirect
                    [400] => Bad Request
                    [401] => Unauthorized
                    [402] => Payment Required
                    [403] => Forbidden
                    [404] => Not Found
                    [405] => Method Not Allowed
                    [406] => Not Acceptable
                    [407] => Proxy Authentication Required
                    [408] => Request Time-out
                    [409] => Conflict
                    [410] => Gone
                    [411] => Length Required
                    [412] => Precondition Failed
                    [413] => Request Entity Too Large
                    [414] => Request-URI Too Long
                    [415] => Unsupported Media Type
                    [416] => Requested range not satisfiable
                    [417] => Expectation Failed
                    [418] => I'm a teapot
                    [422] => Unprocessable Entity
                    [423] => Locked
                    [424] => Failed Dependency
                    [425] => Unordered Collection
                    [426] => Upgrade Required
                    [428] => Precondition Required
                    [429] => Too Many Requests
                    [431] => Request Header Fields Too Large
                    [444] => Connection Closed Without Response
                    [451] => Unavailable For Legal Reasons
                    [499] => Client Closed Request
                    [500] => Internal Server Error
                    [501] => Not Implemented
                    [502] => Bad Gateway
                    [503] => Service Unavailable
                    [504] => Gateway Time-out
                    [505] => HTTP Version not supported
                    [506] => Variant Also Negotiates
                    [507] => Insufficient Storage
                    [508] => Loop Detected
                    [510] => Not Extended
                    [511] => Network Authentication Required
                    [599] => Network Connect Timeout Error
                )
            [statusCode:protected] => 302
            [reasonPhrase:protected] =>
            [headers:protected] => Zend\Http\Headers Object
                (
                    [pluginClassLoader:protected] => 
                    [headersKeys:protected] => Array
                        (
                            [0] => location
                        )
    
    
                [headers:protected] => Array
                    (
                        [0] => Array
                            (
                                [name] => Location
                                [line] => Location: /
                            )
    
                    )
    
            )
        [metadata:protected] => Array
            (
            )
        [content:protected] => 
    ) 
    
  • 浏览器中的地址仍然相同。

  • 浏览器开发人员工具显示浏览器未在任何位置重定向(网络选项卡上没有新条目),
  • 浏览器不会获得新的传入数据。
  • 提供商共享的Apache error.log没有任何条目
  • Apache access.log显示

    05/Mar/2018:13:43:49 +0100
    xxx.xx.xx.xxx   
    POST /open HTTP/1.0
    Status: 200 23 B
    

也许这就是线索:没问题,服务器在POST后发送/favicon.ico?但为什么?我返回 fakeAction() Zend \ Http \ PhpEnvironment \ Response对象而不是ViewModel。

  • 我正在捕捉所有异常,错误和严格的通知,但在这种情况下 - Apache / php / framework不会触发任何异常。

  • 最后一次测试:如果某些文件在复制过程中被损坏,我只是将工作版本的目录从“project”重命名为“project1”efect是相同的 - 重定向不起作用。

更新1

  • 我删除了 vendor 目录并通过composer再次获取。
  • 缓存很清楚(我没有使用缓存,zend框架一直处于开发阶段)

最终更新!

我发现了发生了什么。正如我在我的一个答案中所写,我通过Zend Studio界面使用composer。今天我打开了Zend Studio控制台并仔细检查了控制台日志。 每次我使用命令更新/安装依赖 composer使用自己的缓存(不是在线存储库)并且它复制了模块zend-developer-tool但是(出于不明原因)模块的一个文件被破坏了本地硬盘上的在composer cache 中。删除作曲家缓存并再次运行update / instal依赖后,所有工作都应该如此。谢谢大家的努力。

1 个答案:

答案 0 :(得分:0)

最后,我追查了问题的根源。现在它对我来说并不清楚&#34;为什么&#34;,但问题与模块zendframework/zend-developer-tools相关联。 为什么我确定这个模块失败了?我不是。但也许这可以帮助有类似病例的人。

在无能为力的行为中,我删除了整个&#34; require-dev&#34;部分和重新生成的配置文件(composer update)和问题消失了! 这是一节:

"require-dev" : {
    "zendframework/zend-developer-tools" : "^1.1",
    "zendframework/zend-debug" : "^2.5",
    "san/san-session-toolbar" : "^1.0",
    "zfcampus/zf-development-mode" : "^3.1"
},

我想,也许@edigu是对的,问题在于自动生成的文件,这只是巧合。我必须知道它的未来 - 哪个模块(如果有的话)对我的问题负责。 回滚到“破碎版”之后我开始逐个卸载模块  从这一部分(我当然总是重新生成文件)。效果是一样的 - 问题仍然存在。只有当我删除zend-developer-tools时,一切正常......

当然,如果我在源项目中删除zend-developers-tool然后将其复制到新目录 - 从开始就一切正常。

正如我上面所写 - 我不知道&#34;为什么&#34;然而。 但这是可重复的。每次我复制原始项目 - 我删除此模块后出现重定向问题...

最终更新!

我发现了发生了什么。正如我在我的一个答案中所写,我通过Zend Studio界面使用composer。今天我打开了Zend Studio控制台并仔细检查了控制台日志。 每次我使用命令更新/安装依赖 composer使用自己的缓存(不是在线存储库),它复制模块zend-developer-tool BUT(出于不可知的原因)模块之一&#39;本地硬盘上的文件已损坏在composer cache 中。删除作曲家缓存并再次运行update / instal依赖后,所有工作都应该如此。谢谢大家的努力。