我正在使用 CakePHP 和 AngularJS,我需要验证我的多模型表单。
例如,这是创建元素的方式:
echo $this->Form->input(
$model . '.{{$index}}.url',
array(
'value' => '{{link.url}}',
'label' => 'URL',
'div' => array(
'class' => 'short'
)
)
);
验证正常。 输出:
var_dump($this->Staticpage->validationErrors)
是
array(1) { ["StaticpageLink"]=> array(1) { [1]=> array(2) { ["title"]=> array(1) { [0]=> string(27) "This is a mandatory field." } ["url"]=> array(1) { [0]=> string(27) "This is a mandatory field." } } } }
问题是:如果我使用那个 {{$index}}
,它被正确评估,但没有出现验证消息。例如,如果我设置 1
,就会出现消息。
问题是什么?使用 AngularJS 评估索引的正确方法是什么?
更新:这里是 View 的更具体的部分:
<div ng-repeat="link in links track by $index">
<div ng-hide="link.remove">
<?php
echo $this->Form->hidden(
$model . '.{{$index}}.id',
array(
'value' => '{{link.id}}'
)
);
echo $this->Form->hidden(
$model . '.{{$index}}.remove',
array(
'value' => '{{link.remove}}'
)
);
echo $this->Form->input(
$model . '.{{$index}}.title',
array(
'value' => '{{link.title}}',
'label' => 'Título',
'div' => array(
'class' => 'short'
)
)
);
//continue...
如您所见,它位于 ng-repeat
中。
最佳答案
问题是;
您想使用客户端代码显示服务器端错误验证。
$index
是客户端代码,它是 AngularJS 特定的 javascript 代码。
并且您希望服务器端代码(即 php)了解 $index 是什么。
服务器端,cakePHP 或任何 php,永远不知道 $index 是什么意思,也永远不会知道 $index 将是 1,2,3,4,5 或其他什么。
在 php 端,您的代码在 <? ... ?>
中只会发生一次。
说到客户端,那么ng-repeat
将按链接的次数迭代。
因此,您无法使用 ng-repeat
在 php 中验证您的输入 X 次.
请尝试不同的方法。
---- 编辑------
我建议采用不同的方法,尽管您可能不同意。
无需任何服务器端验证即可生成客户端表单。
呈现由服务器端代码生成的客户端。
AngularJS在客户端提供了很多验证工具,尽量多用,这样提交到服务端时,尽可能有效。
但是,不良用户可以在不使用您的客户端代码的情况下提交您的表单,因此在提交表单时,假设输入并不总是正确,在服务器端验证用户输入。您需要一个单独的验证逻辑而不使用 view(html)。您可以将此部分用作 ajax 调用。
如果有错误,将错误消息返回给用户,以便客户端可以正确显示错误。即“第 3 方 API 调用存在未知错误”
关于javascript - CakePHP 和 AngularJS - {{$index}} 的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21137106/