templateの存在確認

ActionでsetTemplateをする時に、そのTemplateの存在を確認したい。

<?php
  public function existsTemplate($template, $params = array())
  {
    if (!is_array($params)) { $params = array(); }
    $default_params = array(
      'moduleName' => $this->getModuleName(),
      'actionName' => $this->getActionName(),
      'viewName'   => sfView::SUCCESS,
    );
    $p = $params + $default_params;

    $old_template = $this->getTemplate();
    $this->setTemplate($template);

    $context    = $this->getContext();
    $controller = $context->getController();

    $viewInstance = $controller->getView($p['moduleName'], $p['actionName'], $p['viewName']);
    $viewInstance->initialize($context, $p['moduleName'], $p['actionName'], $p['viewName']);

    $template_path = sprintf('%s/%s', $viewInstance->getDirectory(), $viewInstance->getTemplate() );

    $this->setTemplate($old_template);

    return is_readable($template_path);
  }

・・・かなりの力技
※追記:$viewInstance->execute();はいらないのではずした。