自定义布局到sfWidgetFormDoctrineChoice

et_sed 发布于 2019-03-09 doctrine 最后更新 2019-03-09 14:37 0 浏览

我正在使用Symfony 1.4 sfWidgetFormDoctrineChoice 我已将复选框添加到表单中,该表单成功拉取模型数据。我想要做的还包括复选框旁边的缩略图以及标题。

$this->setWidget('bulkUploadVideos', new sfWidgetFormDoctrineChoice(array(
    'model' => 'MediaAsset',
    'query' => Doctrine_Query::create()->select('u.url')->from('MediaAsset u')->orderBy('id DESC'),
    'add_empty' => false,
    'multiple' => true,
    'expanded' => true
   )
));
将查询拉入如下排列的复选框列表的功能非常出色: ⧠Greenjeans Mag Magoo先生 ⧠Droopy 在媒体资产表格中,我也有一个图像网址,我想在布局中包含。所以它看起来像这样: | -img thumbnial- | ⧠Greenjeans | -img thumbnail- | Mag Magoo先生 | -img thumbnial- | ⧠Droopy 我想也许使用一个格式化类,但我没有看到任何形式的变化。 LIB /形式/格式器/ sfWidgetFormSchemaFormatterAllVideos.class.php
<?php 
class sfWidgetFormSchemaFormatterAllVideos extends sfWidgetFormSchemaFormatter {
  protected
    $rowFormat       = "<span class=\"my-label-class\">%label%</span>\n  <span>%error%%field%%help%%hidden_fields%</span>`n",
    $errorRowFormat  = "<span class=\"my-error-class\" colspan=\"2\">\n%errors%</span>\n",
    $helpFormat      = '<br />%help%',
    $decoratorFormat = "<div class='custom-video-layout'>\n  %content%</div>";
}
然后我把它放在MediaAssetsForm.class.php的底部
public function configure() {
    parent::configure();
...
..
...
$this->getWidgetSchema()->setFormFormatterName('AllVideos');
唉,页面布局看起来完全一样。我错误地调用了Formatter,还是有更简单的方法呢? 哪个顺便说一句,仍然没有回答如何从表中查询图像URL到每个复选框的输出的问题。这是我想解决的主要问题。表格中每条记录的缩略图。
已邀请:

mnam

赞同来自:

格式化程序用于呈现整个表单,您需要的是更改其中一个窗口小部件的呈现。 sfwidgetFormDoctrineChoice有一个选项renderer,它将格式化程序作为参数。您需要的是sfWidgetFormSelectCheckbox。我会做的是:

  1. 创建自己的类,这将扩展sfWidgetFormSelectCheckbox类。例如。
    class sfWidgetFormMySelectWithThumbs extends sfWidgetFormSelectCheckbox {
    }
    
  2. 扩展configure函数,因此需要另一个选项来保存缩略图数组。
    public function configure($options = array(), $arguments = array()) {
        parent::configure($options, $arguments);
    $this->addOption('thumbnails', array());
    } 
    
  3. 更改formatChoices功能,使其在复选框前面添加图像(您可以复制和修改原始的formatChoices功能)。
    ...
    $sources = $this->getOption('thumbnails');
    ...
    $inputs[$id] = array(
        'input' => sprintf('| %s | %s',
            $this->renderTag('img', array('src' => $sources[$key])),
            $this->renderTag('input', array_merge($baseAttributes, $attributes))
        ),
        'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)),
    );
    
  4. 在窗口小部件中使用formatter类:
     $this->setWidget('bulkUploadVideos', new sfWidgetFormDoctrineChoice(array(
        ...
        'renderer' => new sfWidgetFormMySelectWithThumbs(array('thumbnails' => $thumbanils))
        )
    ));
    
    当然,您需要将缩略图列表检索为数组,其中数组键与用于复选框值的ID相同,但这不应该是一个问题。