【问题标题】:Error on custom symfony widget自定义 symfony 小部件上的错误
【发布时间】:2012-03-27 07:01:58
【问题描述】:

我想编写一个从 sfFormWidgetChoice 扩展的自定义小部件。 但是,我发现关于 symfony 文档的指南有点令人困惑。 我觉得他们只是把完成的代码扔给我们。 http://www.symfony-project.org/more-wit。验证器

我特别收到了这个错误: 未定义索引:Renderer_options

我知道我做错了什么。我只是不知道我需要在 sfFormWidgetChoice 上覆盖什么。

是否可以创建不需要任何参数的小部件? 您能否提供有关如何创建自定义小部件的步骤?

【问题讨论】:

    标签: php symfony1 widget symfony-1.4


    【解决方案1】:

    当您创建自定义小部件时,您通常会覆盖 configure(以添加自定义选项)和 render(以修改小部件的呈现)方法。

    我认为你得到这个错误是因为你没有调用父类的configure 方法:

    // in YourCustomWidget class 
    protected function configure($options = array(), $attributes = array())
    {
        parent::configure($options, $attributes);
    
        // add your options here
        $this->addRequiredOption('your_mandatory_option');
        $this->addOption('your_optional_option', 'default_value');
    }
    

    sfWidgetFormChoice 只有一个必需选项(您称之为“参数”)choices 数组,因此您应该在创建小部件时传递它:

    // in your form class
    $this->setWidget('your_field', new YourCustomWidget(array(
        `choices` => array('a' => 'a', 'b' => 'b', 'c' => 'c')
    )));
    

    要自定义小部件的呈现,请覆盖渲染方法(就像在the docs 中所示)并实现自定义逻辑。

    【讨论】:

    • 谢谢,这似乎解决了错误。现在我得到以下运行时异常:YourCustomWidget 需要以下选项:“选择”。我在 YourCustomWidget 配置方法中构建 options['choices'] 并将其传递给 parent::configure()。 ¿ 你能制作一个不接收任何参数的小部件吗? ¿ 有错吗?
    • 在调用configure之前在构造函数中检查了所需的选项...但是无论如何你为什么不在表单中构建选择并将它们传递给小部件?如果您不想通过选择,为什么要扩展 sfWidgetFormChoice?您想创建什么样的小部件?您应该扩展 sfWidgetsfWidgetForm(如果您想使用 id 或默认值)并覆盖 render 方法。
    • 谢谢,我解决了这个问题。在 configure() 下,我做了 addOption('choices', myArray) 并且它起作用了......似乎它覆盖了 sfWidgetFormChoices 中所需的选项。感觉 hacky,可能是错误的,但它有效......我需要 sfWidgetFormChoice render() 因为我想要一个带有以特殊方式排序的字符串的选择组合框。
    • 对不起,我的陈述“在调用配置之前在构造函数中检查了所需的选项”是错误的,实际上配置是构造函数中的第一个调用,所以你可以这样做。我认为如果您在代码中使用具有相同选择的自定义小部件,那么它在正确的位置。
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多