1

管理ジェネレーター (Propel バージョン) でいくつかの「問題」が発生しています。リスト ビューとフォーム ビューの間の HTML 生成動作は非常に異なります。フォーム ビューはリスト ビューよりも (そして期待どおりに) うまく機能するため、その理由を知りたいと思います。

「編集」アクション用に次の YAML があります。

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(). どうしてこれなの?これがバグであることを願っています。

2 つの生成方法が異なる理由について誰かが光を当てることができれば、本当に感謝しています。

ありがとうございました。

4

1 に答える 1

0

admin ジェネレーターは、上記の 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 で指定することにより、好みに合わせて変更できます。例えば:

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

その方法の詳細については、http://www.symfony-project.org/book/1_2/14-Generatorsを参照してください。

于 2010-02-10T10:04:46.280 に答える