【问题标题】:Codeigniter HMVC controller doesn't print when called from another controller从另一个控制器调用 Codeigniter HMVC 控制器时不打印
【发布时间】:2012-04-18 16:03:56
【问题描述】:

我不明白为什么我的控制器会返回,但它不会打印一个简单的var_dump

我遵循的步骤:

  1. 模块/控制器/home.php

    $result = modules::run("apis/c_$api/data", $parameters);
    var_dump($result); //works
    
  2. 模块/apis/controllers/c_api1.php

     function data()
     {
    
        #....
        case 'getDataInfo':
            echo 'baa'; //Not working
            $result = simplexml_load_string($this->api1->getDataEntry($parameters['id'], false));
            var_dump($result); //Not working
            break;
        #....
    
    }
    

任何想法为什么会发生这种情况?返回$result 有效,但echovar_dump() 无效

更新

该函数有效,因为如果我在案例中注释$result 行,我没有输出。这意味着该案例有效,但即便如此我也没有得到echo

【问题讨论】:

    标签: php model-view-controller codeigniter hmvc


    【解决方案1】:

    最明显的原因是 case 未匹配。

    没有看到更多api1.php,我不得不猜测。

    【讨论】:

    • 这就是问题所在,它是匹配的!它返回$result,但没有血腥回声。大声笑
    • 如果echo的输出没有关闭,那么它一定是在执行另一个模块,另一个函数,或者使用不同的数据。
    • 不,因为如果我评论 $result 行...我没有输出。我知道,这很奇怪,吓到我了 xD
    • 也许你看不到输出是因为某个地方有重定向?添加退出(); var_dump 之后
    • 检查@Dalen 的答案,因为它似乎有一个非常好的逻辑。
    【解决方案2】:

    我认为 MX HMVC 扩展在通过 Modules::run 调用时会以某种方式阻止模块的输出。

    这里有一小段MX的Modules.php,可以看到输出并没有发送到浏览器而是返回了:

    ob_start();
    $args = func_get_args();
    $output = call_user_func_array(array($class, $method), array_slice($args, 1));
    $buffer = ob_get_clean();
    return ($output !== NULL) ? $output : $buffer;
    

    据我所知,除非您想修改上面的代码,否则无法使用Modules::run 向输出调用模块发送内容。

    这就是为什么您可以在调用者控制器上打印$result 而不是在被调用的控制器上。

    您需要返回要打印的内容,以便在调用方打印。

    【讨论】:

    • 我不知道任何使 Modules::run 'print' 的配置。只需在调用方打印它
    • 我明白了,我想在模块内部打印更多调试功能。但我决定尝试将数据保存到来自printdumpecho 或任何输出函数的变量中,然后在调用者内部再次print
    • 请添加我在评论中写的解决方案,以便我接受您的消息。
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 2013-07-02
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多