【问题标题】:Phalcon, how to get the output in both controller and view?Phalcon,如何在控制器和视图中获得输出?
【发布时间】:2014-07-07 04:26:40
【问题描述】:

如果我添加视图文件“index.phtml”,则只会显示视图

如果我想在控制器中显示回声,我必须删除“index.phtml”或禁用控制器中的视图

public function indexAction()
{
    $this->view->disable();
    echo "this is conntroller";
}

如何在控制器和视图中同时显示输出?

【问题讨论】:

    标签: php phalcon


    【解决方案1】:

    此代码将显示 echo 的输出,然后渲染视图:

    <?php
    
    class TestController extends \Phalcon\Mvc\Controller
    {
        public function indexAction()
        {
            echo 'hello';
    
            $view = new \Phalcon\Mvc\View();
            $view->setViewsDir(APPLICATION_PATH . '/app/views/');
    
            $view->start();
            $view->render('test', 'index');
            $view->finish();
    
            echo $view->getContent();
            die();
        }
    }
    

    或者将视图服务放在DI中:

    $di->set('view', function(){
        $view = new \Phalcon\Mvc\View();
        $view->setViewsDir(APPLICATION_PATH . '/app/views/');
        return $view;
    }, true);
    

    然后在控制器中使用:

    <?php
    
    class TestController extends \Phalcon\Mvc\Controller
    {
        public function indexAction()
        {
            echo 'hello';
    
            $this->view->start();
            $this->view->render('test', 'index');
            $this->view->finish();
    
            echo $this->view->getContent();
            die();
        }
    }
    

    P.S. 但我不推荐这种方法。更好的方法是在视图中分配变量并显示出来。

    【讨论】:

      【解决方案2】:

      试试

      public function indexAction()
      {
          $this->view->disable();
          echo "this is conntroller";
          die; // or exit;
      }
      

      希望对你有帮助

      【讨论】:

      • 不起作用,我不想禁用视图,我想在控制器中回显某些内容并加载视图
      • 你为什么要这样做?你为什么不使用: $this->view->yourvar = 'abc';最重要的是,您可以通过 "echo $yourvar;" 显示它?
      【解决方案3】:

      我认为控制器不应该显示东西。所有动作都应该放在控制器中并显示在视图中。

      【讨论】:

        【解决方案4】:

        FirePHP 将允许您从 PHP(控制器,任何地方)转储并在您的浏览器 javascript 控制台日志中查看结果。唯一的问题是你必须ob_start() 这会在调试期间破坏你的重定向。

        对于在浏览器中没有显示新渲染页面的 AJAX 调试特别方便。

        我只是将它包含在我的依赖注入中,然后可以像使用 var_dump() 一样使用 $this-&gt;logger-&gt;info()

            /**
            * FirePHP Logger for dumping into console.
            */
            $di->set('logger', function() {
                //$logger = new \Phalcon\Logger\Adapter\Firephp('debug', null);
        
                require_once(__DIR__ . '/../../libs/firephp-core/lib/FirePHPCore/FirePHP.class.php');
                ob_start();
                $logger = \FirePHP::getInstance(true);
                $logger->setEnabled(true); // TODO: Config to disable.
        
                return $logger;
            }, true);
        

        如果问题更多是关于如何在生产环境中从控制器和视图输出。简短的回答是:你不这样做,这样做会否定使用组织和分离这些不同类型事物的 MVC 框架。

        注意:从孵化器中注释掉 Phalcon 适配器,在我的案例中更容易让类直接工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-12
          • 1970-01-01
          • 2013-07-24
          • 1970-01-01
          相关资源
          最近更新 更多