1

在Zend Framework中设计器的设计有多糟糕,让我非常难以理解。 我今天花了很多时间,还花了很多时间试图弄清楚如何做一些简单的前端任务。ZF中的Zend_Forms和装饰器 - 在一个容器中显示标签,输入和错误

在我看来,Zend_Forms和装饰器是ZF最糟糕的部分,因为后端和前端没有正确分离。为什么表单类会规定如何打印HTML?

所有我在寻找,东西simple这样的:

<div class="labeledField"> 
    <label for="username">Username</label> 
    <input type="text" id="username" name="username" /> 
</div> 
<div class="labeledField"> 
    <label for="password">Password</label> 
    <input type="password" id="password" name="password" /> 
</div> 

我希望它这样的原因是因为我想要的标签坐在像场的顶部:

[Username  ] 
[Password  ] 

通过这种方式,我可以使标签在选择输入时稍微淡化,但在选择输入时仍然保持不变。当输入框包含任何内容时,使用JS标签将被隐藏。此功能存在于Apple购物车上。

我喜欢Zend_form的验证部分,如果后端代码没有规定HTML的外观,我会喜欢它如何放置在前端。

在我看来,要么采取的模板(从frontender与访问/视图/文件夹或我应该可以做一些事情,如:

<div class="labeledField"> 
    <?php 
    echo $this->form->username->getLabel(); 
    echo $this->form->username->getElement(); 
    $errors = $this->form->username->getErrors(); 
    if (sizeof($errors) > 0) { 
     ?> 
     <div class="errors"> 
     <?php 
     foreach($errors as $error) { 
      ?> 
      <li><?php echo $error ?></li> 
      <?php 
     } 
     ?> 
     </div> 
     <?php 
    } 
    ?> 
</div> 

但随后的模板可以让我只是回声$ this->形式,并使用上述格式作为我想要的字段。

+0

是的,Zend_Form是我最不喜欢的组件。我的建议:沟Zend_Form,并使用验证器类来验证您自己的手动编码形式的输入。 –

回答

2

没有关于它的问题,装饰者可以采取一些习惯让我解决/回答你的一些问题/问题:

几乎把我的头发都转移到Zend Framework中设计器的设计上有多糟糕。我今天花了很多时间,还花了很多时间试图弄清楚如何做一些本应该是简单的前端任务。

是的,这是一个奇迹,我什么都留下了头发。

在我看来,Zend_Forms和装饰器是ZF最糟糕的部分,因为后端和前端没有正确分离。为什么表单类会规定如何打印HTML?

我同意你在这里,表单如何呈现是一个演示文稿问题,所以它可能更多的视图相关。如果你真的想分开问题,你可以创建未装饰的表单,然后在视图脚本中添加装饰器,也许使用一些自定义的视图助手。这对我来说最有意义,尽管我承认我从来没有打算这么做。

对于设置一个单独的表格上装饰一个独立的类的实例,看看EasyBib_Form_DecoratorUsing Zend_Form without Zend Framework MVC

在我看来,要么采取的模板(从frontender与访问/视图/文件夹或者我应该可以做这样的事情:

你几乎不使用ViewScript decorator

$form->setDecorators(array(
    array('ViewScript', array(      // note case 
     'viewScript' => '_partials/forms/my.phtml', // note case 
))); 
有功能

这就是说,你想要的标记是相对简单的使用标准装饰:

// not tested, but should be pretty close 
$element->setDecorators(array(
    'ViewHelper', 
    'Label', 
    'Errors', 
    array('HtmlTag', array('tag' => 'div', 'attribs' => array('class' => 'labeledField'))), 
)); 

当然,形式的任何特殊造型或客户端的操作 - 例如,你举了苹果车效果 - 可分层到客户端的这个标记。

+0

感谢所有的信息,这是迄今为止我听到的最好的。尽管如此,我仍然没有得到如何将它们拼凑在一起的逻辑:D你的例子可以直接使用,但试图用它来做一些稍微不同的事情,但这不起作用,我正在摸索着我的脑袋,想知道我应该怎么做从逻辑上思考它。试图让

Checkbox Label

+0

我有这样的: '$ checkboxDecorator =阵列( \t \t '视图助手', \t \t '标签', \t \t '错误', \t \t阵列( 'HtmlTag',阵列(”标签” => '的div', '类'=> '复选框')), \t \t阵列( '标签',阵列( '放置', 'APPEND')) \t);' 但随后的标签在容器外面...所以我认为你需要在y之前完成那件作品ou包裹它们......它们都被包裹起来,但没有被附加!不太清楚如何看待它 –

+0

现在好了,它已经成为一个bug ...我通过将'label'更改为'Label'来修复它......但下面的代码可以同时使用小写和大写:'$ checkboxDecorator =阵列( \t \t '视图助手', \t \t阵列( '标签',阵列( '放置'=> 'APPEND')) \t);' –