cakephp: могу ли я установить $ scripts_for_layout из контроллера? - PullRequest
2 голосов
/ 25 февраля 2010

Я бы хотел установить макет $ scripts_for_layout из контроллера. Возможно ли это, и если да, то как?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Краткий ответ: возможно, вы делаете это неправильно.

Длинный ответ: Сценарии не должны зависеть от контроллера. Это «теоретически» неправильно, и торт не любит людей, которые не придерживаются модели mvc.

Обходной путь (потому что иногда вам просто нужно): вы можете установить в beforeRender переменную:

function beforeRender() {
    parent::beforeRender();
    $this->set('scripts', array('script1', 'script2' ...));
}

А в макете проверьте $ scripts и добавьте их.

1 голос
/ 26 июля 2011

Я знаю, что это старый вопрос, но у меня была такая же проблема сегодня. Решение кажется проще, чем ответы, упомянутые здесь. Из кулинарной книги CakePHP 1.2:

inline: должен ли блок быть напечатан inline или записан в кеш для последующего вывода (например, $ scripts_for_layout).

Итак, по вашему мнению, вам просто нужно включить скрипты, устанавливающие inline как false, например:

$javascript->link('script1', false)

Вы можете сделать то же самое для CSS:

$html->css('stylesheet1', null, array(), false)

Внимание : Я проверял это только на CakePHP 1.2. Но согласно кулинарной книге для 1.3 это одно и то же.

1 голос
/ 26 февраля 2010

В торт 1.2, когда вы делаете $this->set('script_for_layout', 'script here...), она преобразует эту переменную в $ scriptForLayout, чтобы она не работала.

Cake 1.3 исправил это, но я не пытался увидеть, работает ли он или нет, но вы нарушаете MVC, потому что скрипт предназначен для просмотра, а не для уровня контроллера. Для динамического сценария вы можете назначить переменные вашему представлению, как предлагал предыдущий плакат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...