从我的表单生成器脚本限制依赖项

时间:2014-04-13 08:37:32

标签: php oop

我制作了一个简单的PHP脚本,它会生成一个html表单。 该脚本由两部分组成,即表单和表单元素。

现在,当我需要表格时,我可以这样做:

$form = new Form();
$checkbox = new Checkbox();
$checkbox->setLabel('Label');
$checkbox->setData('data');
$form->addElement($checkbox);
$textarea = new Textarea();
$textarea->setData('data');
$radio = new Radio();
$form->addElement($textarea);
$form->addElement($radio);

事情是,当我有一个包含许多不同元素的大型表单时,我的模型或控制器有很多use语句,指向不同的表单元素。

我对OOP很新,但人们告诉我,很多依赖都是不好的做法。

限制这些依赖关系的最佳方法是什么?

我应该创建另一个包含所有表单依赖项的类,并使用此类只有一个依赖项,还是有更好的方法呢?

由于

1 个答案:

答案 0 :(得分:1)

怎么样......

class Form
{
    ...
    public function add($element)
    {
        ...

        return $this;
    }
}

class Checkbox extends FormElement
{
    ...
    public function __construct($data = null, $label = null)
    {
        ...
    }
}

现在你可以:

$form = new Form();
$form
    ->add(new Checkbox('data', 'Label'))
    ->add(new Textarea('data'))
    ->add(new Radio('data'));

或者您可以查看Symfony的表单组件(http://symfony.com/doc/current/book/forms.htmlhttps://github.com/symfony/symfony/tree/master/src/Symfony/Component/Formhttp://webmozarts.com/bsc-thesis.pdf)。

Symfony的方法是使用“tags”,表示表单元素实例的字符串名称(实现接口以确保某些方法),因此您可以通过配置更改这些依赖项。

好吧,看来你喜欢它!然后你必须实现一种表单管理器来按名称获取实例,祝你好运!