【发布时间】:2014-07-07 04:26:40
【问题描述】:
如果我添加视图文件“index.phtml”,则只会显示视图
如果我想在控制器中显示回声,我必须删除“index.phtml”或禁用控制器中的视图
public function indexAction()
{
$this->view->disable();
echo "this is conntroller";
}
如何在控制器和视图中同时显示输出?
【问题讨论】:
如果我添加视图文件“index.phtml”,则只会显示视图
如果我想在控制器中显示回声,我必须删除“index.phtml”或禁用控制器中的视图
public function indexAction()
{
$this->view->disable();
echo "this is conntroller";
}
如何在控制器和视图中同时显示输出?
【问题讨论】:
此代码将显示 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. 但我不推荐这种方法。更好的方法是在视图中分配变量并显示出来。
【讨论】:
试试
public function indexAction()
{
$this->view->disable();
echo "this is conntroller";
die; // or exit;
}
希望对你有帮助
【讨论】:
我认为控制器不应该显示东西。所有动作都应该放在控制器中并显示在视图中。
【讨论】:
FirePHP 将允许您从 PHP(控制器,任何地方)转储并在您的浏览器 javascript 控制台日志中查看结果。唯一的问题是你必须ob_start() 这会在调试期间破坏你的重定向。
对于在浏览器中没有显示新渲染页面的 AJAX 调试特别方便。
我只是将它包含在我的依赖注入中,然后可以像使用 var_dump() 一样使用 $this->logger->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 适配器,在我的案例中更容易让类直接工作。
【讨论】: