【问题标题】:Agile Toolkit 4.2 ... reference field type breaking with modelAgile Toolkit 4.2 ...参考字段类型与模型中断
【发布时间】:2012-04-22 21:04:21
【问题描述】:

这是对引用字段示例代码的简单重写:

class page_LoadResults extends Page {
function init(){
    parent::init();
    $p=$this;
    $f=$p->add('Form');

$c=$p->add('Model_Season');
$f->addField('reference','Season')
    ->setValueList($c)
    ->validateNotNull()
    ->add('Icon',null,'after_field')
    ->set('arrows-left3')
    ->addStyle('cursor','pointer')
    ->js('click',$f->js()->reload())
    ;

调用时我收到一条错误消息:

\atk4\lib\Form/Field.php:652 [2] htmlspecialchars() 期望参数 1 是字符串,给定数组

查看代码,在 Field.php 中的第 648 行附近

    foreach($this->getValueList() as $value=>$descr){
        // Check if a separator is not needed identified with _separator<
        $output.=
            $this->getOption($value)
            .htmlspecialchars($descr)
            .$this->getTag('/option');
    }

确实显然将 $descr 创建为 ($value,descr) 的数组

这是一个错误还是我不在基地。谢谢。

【问题讨论】:

    标签: atk4


    【解决方案1】:

    使用 atk 4.2 语法

    <?php
    
    class page_b extends Page {
        function init(){
            parent::init();
            $p=$this;
            $f=$p->add('Form');
            $field = $f->addField('Dropdown','Season');
            $field->setModel("a");
            $field
                ->validateNotNull()
                ->add('Icon',null,'after_field')
                ->set('arrows-left3')
                ->addStyle('cursor','pointer')
                ->js('click',$f->js()->reload())
                ;
        }   
    }
    
    1. 关注addField("Dropdown")
    2. 使用setModel 而不是setValueList($model);

    【讨论】:

    • 你测试过这个吗?它不适用于表格模型。类 Form_Field_ValueList 定义了 setModel() 方法,它只包含以下代码: $this->setValueList(array('foo','bar'));
    • 然后是 getValueList() 方法对事物进行排序。
    • 我不明白你的评论,setModel 函数只是调用了 super 方法,然后将 valuelist 设置为 foo,bar。然后下拉列表不包含任何内容。
    • 好的,看,我已经测试过了(确切的代码如上),它在最新的 atk4 4.2(master 分支)上运行良好。尝试更新您的 atk4 版本。至于之前的评论,检查类,Form_Field_ValueList,方法getValueList。如果模型存在,您将看到它将使用模型来获取数据。那个“$this->setValueList(array('foo','bar'));”仅适用于模型失败的情况。另外,检查 Form_Field_Dropdown-getInput 方法。你会看到它正在使用 getValueList 来获取数据(如果可能的话,它使用模型)
    • 感谢您的耐心等待!从github下载最新版本已经修复了,不知道为什么,但没关系。
    猜你喜欢
    • 2012-07-19
    • 2019-09-14
    • 2012-07-20
    • 2013-05-11
    • 2021-03-27
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多