Как компоненты должны добавлять JavaScript и CSS в Symfony - PullRequest
4 голосов
/ 13 февраля 2010

Мой layout.php вызывает include_javascripts (), прежде чем мой компонент сможет вызвать sfResponse :: addJavascript (). Есть ли «помощник» или «лучшая практика» для этого?

Должен ли я отделить вызов sfResponse :: addJavascript ()? Я был счастлив избежать этого.

Вот мой фактический обходной путь:

<head>
  <?php $nav = get_component('nav', 'nav') /* Please show me a better way. */ ?>
  <?php include_javascripts() ?>
  ...
</head>
<body>
  <?php /* include_component('nav', 'nav') */ ?>
  <?php echo $nav ?>
  ...
</body>

Спасибо

Ответы [ 3 ]

11 голосов
/ 16 февраля 2010

От: http://www.symfony -project.org / book / 1_2 / 07-Inside-the-View-Layer

Конфигурация включения файла

// В view.yml

indexSuccess:
  stylesheets: [mystyle1, mystyle2]
  javascripts: [myscript]

// В действии

$this->getResponse()->addStylesheet('mystyle1'); 
$this->getResponse()->addStylesheet('mystyle2'); 
$this->getResponse()->addJavascript('myscript');

// В шаблоне

<?php use_stylesheet('mystyle1') ?>
<?php use_stylesheet('mystyle2') ?>
<?php use_javascript('myscript') ?>
3 голосов
/ 14 февраля 2010

Если ваш компонент всегда используется, просто переместите включение JavaScript в рендеринг макета в view.yml вашего приложения:

default:
  javascripts: [my_js]

Нет необходимости отделять вызов JS, когда он всегда используется.

UPDATE:

Если вы должны поддерживать включение JS с компонентом, вы можете поместить вызов компонента в слот перед вызовом include_javascripts(), чтобы добавить его в стек для рендеринга, а затем включить слот в подходящее место:

<?php slot('nav') ?>
<?php include_component('nav', 'nav'); ?>
<?php end_slot(); ?>
<html>
  <head>
    <?php include_javascripts() ?>
    ...
  </head>
  <body>
    <?php include_slot('nav'); ?>
    <?php echo $nav ?>
    ...
  </body>
</html>
0 голосов
/ 13 февраля 2010

Возможно, вам придется отключить sfCommonFiter , который теперь устарел . Общий фильтр автоматически добавляет CSS / JS в макет.

Как только вы это сделаете, вы можете переместить вызов include_javascripts в любое место файла layout.php, под include_component('nav', 'nav') call

...