form cake helper string concat在cakephp中将零转换为unset

时间:2010-06-18 11:21:25

标签: php cakephp cakephp-1.2

这让我好斗。我正在尝试在cakePHP 1.2.5&中创建一个字段数组。 PHP 5.3.2 该数组基于零。在第一次迭代中,$ count == 0.由于某种原因,字符串连接似乎将此转换为null或取消设置哪个蛋糕然后解释为“在此处插入模型名称”,即:

for($count=0;$count<$num;$count++)
{
   echo $form->input($count.'.NodeDescriptor.title');
}

<input name="data[NodeDescriptor][NodeDescriptor][title]" type="text" id="NodeDescriptorNodeDescriptorTitle" />
<input name="data[1][NodeDescriptor][title]" type="text" id="1NodeDescriptorTitle" /></div><tr><td><div class="input select">
...

我已经尝试过施放值,strval'ing它,单引号,双引号,双引号和{}无济于事。这是一个PHP功能,一个CakePHP unrobustness还是我笨蛋?

3 个答案:

答案 0 :(得分:1)

首先,如果您要保存映射到同一模型的字段并希望多个数据库插入,那么数据数组应该格式化为上面表达的Mike:

即。模型。{N}的点域

您可以清楚地看到他们显式说当您在同一模型中将相同的字段名多次保存为是约定作为手册的标题时section是“Field Naming Conventions”的名称

http://book.cakephp.org/view/1390/Automagic-Form-Elements#Field-naming-convention-1391

如果没有编写输入法以适应您以非预期的方式使用该方法,则无法将输入问题称为CakePHP错误。该方法显式地将传递的字符串拆分为“。”。字符并假设如果您使用带有“。”的字符串。您打算使用Model-&gt; save或Model-&gt; saveAll

格式化数据阵列以保存的字符

其次,当我在我的代码中测试你的代码时,它确实表现出一个合法的错误 - 它使用我期望的数字索引但是重复它们。

即。 [0] [0] [描述符] [标题],1 [描述符] [标题]

当我将索引移动到save *函数所期望的位置时,解析是完美的。

即。 [描述符] [0] [标题],Descriptor [标题]

因此,如果您想使用帮助程序,您应该按照它们的工作方式使用它们。如果您发明自己的边缘案例并不是帮助者开始支持的,那么这不是一个错误。

从您的示例来看 - 没有理由不使用saveAll。你有理由避免它吗?这似乎是你正在做的事情的正确方法。

**编辑修改门票http://cakephp.lighthouseapp.com/projects/42648/tickets/867 **

将此应用为app / views / app_view.php

<?php

App::import('View', 'View', false);

class AppView extends View {

    /**
     * Constructor
     *
     * @param object $controller
     */
    function __construct(&$controller){
            parent::__construct($controller);
    }

    /**
     * Temporary View::entity fix for 1.2.5
     * Returns the entity reference of the current context as an array of identity parts
     *
     * @return array An array containing the identity elements of an entity
     * @access public
     */
    function entity() {
        $assoc = ($this->association) ? $this->association : $this->model;
        if (!empty($this->entityPath)) {
            $path = explode('.', $this->entityPath);
            $count = count($path);
            if (
                ($count == 1 && !empty($this->association)) ||
                ($count == 1 && $this->model != $this->entityPath) ||
                ($count == 2 && !empty($this->fieldSuffix)) ||
                is_numeric($path[0]) && !empty($assoc)
            ) {
                array_unshift($path, $assoc);
            }
            return Set::filter($path);
        }
        return array_values(Set::filter(
            array($assoc, $this->modelId, $this->field, $this->fieldSuffix)
        ));
    }
}
?>

告诉您的控制器使用该视图的public $ view属性。

<?php
    class FooController extends Controller {
        ...
        ...
        var $view = 'App';
        ...
        ...
    }
?>

答案 1 :(得分:1)

我将数组重新设置为1,它可以正常工作。

答案 2 :(得分:0)

你能坚持使用CakePHP约定并首先放置模型名称,然后是索引吗?

echo $form->input('NodeDescriptor.'.$count.'.title');