This repository has been archived on 2024-10-25. You can view files and clone it, but cannot push or open issues or pull requests.
Sequenzia/Rails/ActionController/Response/View.php
2013-10-02 01:12:58 -05:00

64 lines
2.3 KiB
PHP
Executable File

<?php
namespace Rails\ActionController\Response;
use Rails;
use Rails\ActionView;
class View extends Base
{
private $_xml;
public function _render_view()
{
try {
ActionView\ViewHelpers::load();
$this->_renderer = new ActionView\Template($this->_params, $this->_params['layout']);
$locals = Rails::application()->controller()->vars();
if (!empty($this->_params['is_xml'])) {
$this->_xml = new ActionView\Xml();
$locals->xml = $this->_xml;
}
$this->_renderer->setLocals($locals);
$this->_renderer->render_content();
} catch (ActionView\Template\Exception\ExceptionInterface $e) {
switch (get_class($e)) {
case 'Rails\ActionView\Template\Exception\LayoutMissingException':
case 'Rails\ActionView\Template\Exception\TemplateMissingException':
$route = $this->router()->route();
if (Rails::application()->dispatcher()->action_ran()) {
$token = $route->to();
throw new Exception\ViewNotFoundException(
sprintf("View for %s not found", $token)
);
} else {
if ($route->namespaces())
$namespaces = ' [ namespaces => [ ' . implode(', ', $route->namespaces()) . ' ] ]';
else
$namespaces = '';
throw new Exception\ActionNotFoundException(
sprintf("Action '%s' not found for controller '%s'%s", $route->action(), $route->controller(), $namespace)
);
}
break;
default:
throw $e;
break;
}
}
}
public function _print_view()
{
if (!empty($this->_params['is_xml']))
return $this->_xml->output();
else
return $this->_renderer->get_buffer_and_clean();
}
}