Php Ajax方法呈现多个元素

Php Ajax方法呈现多个元素,php,cakephp-3.0,Php,Cakephp 3.0,我有一个ajax方法,它接受标记的id数组,并进行一些处理以确保标记没有被使用。然后,我需要将HTML发送回客户端,以便使用javascript呈现标记。只需一个标签,调用就相当简单了 $this->render('/Element/tag'); 来自控制器,因为“render”生成的响应主体将包含元素的html。如何将标记数组转换为每个元素,并将其作为响应发送回客户端?您只能调用render一次-将其视为简单地指示您希望在控制器代码末尾使用的“视图” 如果需要呈现多个标记的视图,可以定

我有一个ajax方法,它接受标记的id数组,并进行一些处理以确保标记没有被使用。然后,我需要将HTML发送回客户端,以便使用javascript呈现标记。只需一个标签,调用就相当简单了

$this->render('/Element/tag');

来自控制器,因为“render”生成的响应主体将包含元素的html。如何将标记数组转换为每个元素,并将其作为响应发送回客户端?

您只能调用
render
一次-将其视为简单地指示您希望在控制器代码末尾使用的“视图”

如果需要呈现多个标记的视图,可以定义一个新视图,例如
/src/Template/tags/tags.ctp

您可以将任何想要的内容传递到视图中(标签/Tags.ctp文件),包括标签数组:

$tags = ['Tag 1', 'Tag 2'];

$this->set('tags', $tags);

$this->render('Tags/tags');
然后在
tags.ctp
中,使用tag元素渲染每个:

<?php foreach ($tags as $tag) {
    echo $this->element('tags',  [
        "tag" => $tag
    ]);
}

据我所知,我不应该像这样发回html,而应该只发送数据并在javascript中构建我的元素。但是有了元素模板又有什么好处呢?在这个用例中,我如何利用模板?我通常不同意这种观点,它简化到从不通过CakePHP呈现HTML的程度(为什么不用javascript构建整个应用程序,并用JSON发送所有内容?!)。这是一种有效但不同的做事方式。CakePHP还可以利用来允许同一端点有时提供HTML,有时提供JSON数据。有没有一个解决方案是干燥剂?元素的全部要点是定义可重用HTML的短片段,您可以将其插入视图中。。它们是一种工具,可以从多个视图访问重复的代码位,这是一个非常枯燥的原则。您希望避免的“重复”部分是什么?我现在有一个元素用于呈现单个标记,另一个元素用于呈现多个标记。我希望能够像render()那样为多个标记发回数据,并且只使用一个“tag”元素。您仍然会与视图混淆——可能是因为您“劫持”了问题中的一个元素作为视图。如果遵循常规惯例,则应创建一个视图模板(与控制器名称匹配,例如,
Tags控制器::processTags
将自动查找
src/template/Tags/processTags.ctp
),然后不需要调用
render
。使用
$this->set
将同一视图设置为一组标记或一个标记。元素通常不应从控制器调用。元素补充视图。