Поведение администратора Symfony (Propel) - Почему это работает так? - PullRequest
1 голос
/ 29 января 2010

У меня возникли некоторые проблемы с генератором администратора (версия Propel). Поведение генерации HTML между представлением списка и представлением формы сильно отличается, и я хотел бы знать, почему, поскольку представление формы работает лучше (и, как и ожидалось), по сравнению с представлением списка.

У меня есть следующий YAML для действия 'edit',

edit:
  actions:
    custom: { confirm: 'Run this custom action?' }
    _list:  ~
    _save:  ~

Это генерирует следующий HTML / PHP для указанного пользовательского действия,

// Snip ...
<li class="sf_admin_action_custom">
<?php if (method_exists($helper, 'linkToCustom')): ?>
  <?php echo $helper->linkToCustom($form->getObject(), array(  'confirm' => 'Run this custom action?',  'params' =>   array(  ),  'class_suffix' => 'custom',  'label' => 'Custom',)) ?>
<?php else: ?>
  <?php echo link_to(__('Custom', array(), 'messages'), 'users/ListCustom?id='.$user->getId(), array()) ?>
<?php endif; ?>
</li>
// Snip ...

Теперь, если я добавлю свое настраиваемое действие в YAML для представления списка,

list:
  object_actions:
    custom:  { confirm: 'Run this custom action?' }
    _edit:   ~
    _delete: ~

Я получаю следующий сгенерированный HTML-код,

// Snip ...
<li class="sf_admin_action_custom">
  <?php echo link_to(__('Custom', array(), 'messages'), 'users/ListCustom?id='.$user->getId(), array()) ?>
</li>
// Snip ...

Здесь есть некоторые отчетливые различия, которые я нахожу очень странными,

  1. Код действий формы проверяет, есть ли метод у помощника, и использует его в этом случае, возвращаясь к стандартной функции link_to(), если нет. Однако код списка действий просто использует функцию link_to(), даже не пытаясь использовать помощника.
  2. Код действий формы передает мое пользовательское сообщение подтверждения пользовательскому вспомогательному методу, но ни один из шаблонов не передает его в link_to(). Почему это? Я надеюсь, что это ошибка.

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

Спасибо.

1 Ответ

0 голосов
/ 10 февраля 2010

Генератор администратора использует шаблоны, которые генерируют вышеупомянутый HTML / PHP. Тема по умолчанию находится по адресу:

sfConfig::get('sf_symfony_lib_dir')/plugins/sfPropelPlugin/data/generator/sfPropelModule/admin/. (версия 1.2)

или

$sf_symfony_data_dir/generator/sfPropelAdmin/default/ (версия 1.0)

HTML / PHP-код отличается тем, что шаблоны, используемые для генерации этих файлов, отличаются, но вы можете изменить их по своему вкусу, создав собственную тему и указав ее в generator.yml. E.g.:

generator:
  class: sfPropelGenerator
  param:
    model_class:           BlogArticle
    theme:                 customTheme

Дополнительную информацию о том, как это сделать, читайте в http://www.symfony -project.org / book / 1_2 / 14-Generators

...