Установка переменной в Symfony, которая будет читаться в другом модуле? - PullRequest
0 голосов
/ 15 февраля 2012

Я взял проект Symfony, который кто-то создал. Таким образом, я не знаю, как это работает на самом деле. За последние 6 месяцев я делал разные изменения, так что смутное представление ... но эта проблема поставила меня в тупик.

Я с оптимизмом надеюсь, что вы, ребята, сможете помочь, просто отключившись от структуры filenames / directory. Поэтому я постараюсь сделать это простым.

Что-то, что я знаю внутри ...

/apps/frontend/modules/search/actions.class.php

Нужно быть видимым для ...

/apps/frontend/modules/contact/templates/_minicontact.php

Эти два файла выводятся в этот шаблон:

/apps/frontend/templates/pageDetails.php

со следующими двумя строками кода:

<?php echo $sf_content ?>

and...

<?php include_component('contact','minicontact'); ?>

Я попытался установить $ this-> myvar в первом файле и проверить оба $ this-> myVar и $ myVar во втором файле, и мне не повезло.

BODGING IS FINE . Я просто хочу самый быстрый и простой способ добиться этого. В ближайшие несколько месяцев клиент получит совершенно новый сайт, поэтому делать это «красиво» не нужно. Просто дай мне быстрое и грязное! :)

Я уверен, что ответ очень прост ... Я потратил довольно много времени на то, чтобы get_defined_vars пытался выяснить, куда мне его поместить, но безрезультатно.

СПАСИБО!

edit: Symfony v1.2, хотя я сомневаюсь, что версия имеет какое-либо значение для вопроса.

1 Ответ

1 голос
/ 15 февраля 2012

ОБНОВЛЕНИЕ :

Я только что заметил ваш путь для pageDetails.Это может быть альтернативный макет.В этом случае вам нужно передать переменную до макета.Как правило, это делается с помощью слота, в котором не отображается представление.Но вы не предоставили достаточно информации, чтобы знать, сработает ли это, потому что вам может понадобиться передать это значение из нескольких представлений из нескольких модулей.

Поэтому, возможно, самым простым решением будет дублирование любой логикивыдает значение в компоненте minicontact.

// in /apps/frontend/modules/contact/actions/components.class.php
public function executeMinicontact() 
{
   // add the logic to produce the value for $myVar here and then:
   $this->myVar = 'theValue';
}

Я не совсем понимаю, почему $sf_content будет отображаться в pageDetails.php, который должен быть представлением для данного модуля.Обычно $sf_content будет виден только layout.php.

Любой способ передачи параметра компоненту или частичному, например, так:

<?php include_component('contact','minicontact', array('myVar' => 'yourValue'); ?>

Конечно, предполагается, что значение, которое вы хотитепереход на minicontact уже присутствует в pageDetails.php.Если это не так, вам нужно добавить его в представление в качестве переменной в вашем классе действий - например,

// note this is the method name by convention but it may not be whats actually
// your pageDetails.php - you can get info about what action is being executed
// from the debug bar in the dev environment.
public function executePageDetails(sfRequest $request)
{
   $this->myVar = 'the value';
}

, затем в pageDetails.php:

<?php include_component('contact','minicontact', array('myVar' => $myVar); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...