Визуализация частичного из задачи в Symfony 1.4

Я пытаюсь сделать частичное в задании Symfony, и мне не везет. Я нашел документы в 1.1, которые говорят, чтобы просто позвонить get_partial() но, видимо, это больше не доступно в 1.4. Я попытался загрузить помощник вручную sfLoader::getHelpers('Partial'); но я получаю "Класс sfLoader не найден". Любая помощь будет принята с благодарностью.

Для справки я пытаюсь создать HTML-файл с именем header.html из моего глобального заголовка, частично используемого во всех моих макетах для включения в сторонний форум, который я интегрирую (Simple Machines/SMF).

6 ответов

Решение

Первая загрузка:

sfContext::getInstance()->getConfiguration()->loadHelpers('Partial');

тогда просто позвоните:

get_partial()

Это сделает свое дело:

//load the Partial helper to be able to use get_partial()
$contextInstance = sfContext::createInstance($this->configuration);
$contextInstance->getConfiguration()->loadHelpers('Partial');

Не забудьте добавить имя приложения в настройках вашей задачи. Посмотрите на эту строку:

new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED,'The application name', 'frontend')

Сейчас $this->configuration возвращает sfApplicationConfiguration что тебе нужно

Просто вызвал частичное в задаче для использования при отправке бесплатной пробной электронной почты, вот код:

//combines the partial with passed variables and puts the results in a string variable
$contextInstance = sfContext::createInstance($this->configuration);
$contextInstance->getConfiguration()->loadHelpers('Partial');

$partial_in_a_string = $contextInstance->getController()
          ->getAction('module_name', 'action_name')
          ->getPartial('module_name/partial_name', array('var_name'=>'var_value'));

sfLoader устарел в Symfony 1.2 - я думаю, что вам нужно просмотреть API 1.4 и справку по обновлению с любой версии, с которой вы знакомы, поскольку это будут ресурсы, на которые вам нужно будет ссылаться.

Хитрость в решении вашей проблемы - загрузить помощника loadHelpers() метод, предоставленный sfApplicationConfiguration класс - ваша задача должна подключить этот метод в своем configure() метод. Я не делал этого раньше себя, ум...

Убедитесь, что в вашем методе настройки есть опция приложения:

protected function configure()
{
    $this->addOptions(array(
        new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend')
    ))
    ....

А затем в методе execute:

protected function execute($arguments = array(), $options = array())
{
    sfContext::createInstance($this->configuration)->getConfiguration()->loadHelpers('Partial');

Таким образом вы предотвратите следующие ошибки:

Контекст "по умолчанию" не существует.

а также

Аргумент 1, переданный в sfContext::createInstance(), должен быть экземпляром sfApplicationConfiguration

Вы можете получить доступ к текущей конфигурации с

$this->configuration

Вы также можете определить опцию команды приложения в методе taskClass::configure() (если вы использовали symfony generate:task для генерации класса задачи, у вас должен быть интерфейс в качестве опции приложения по умолчанию). При желании вы можете передать приложение, используя --application=appName из cli при вызове вашей задачи.

Другие вопросы по тегам