Php 将控制器数据数组传递给home.ctp的元素
根据手册和我的代码,这应该是完美的工作,但它不是。我在这段代码上乱搞了太久了,我想让任何人都看看它,看看是否有我看不到的东西 我试图调用plans控制器的index操作,将数据数组传递给元素以供显示。有人知道为什么这不起作用吗 我遇到了一个常见的错误:Php 将控制器数据数组传递给home.ctp的元素,php,arrays,cakephp,Php,Arrays,Cakephp,根据手册和我的代码,这应该是完美的工作,但它不是。我在这段代码上乱搞了太久了,我想让任何人都看看它,看看是否有我看不到的东西 我试图调用plans控制器的index操作,将数据数组传递给元素以供显示。有人知道为什么这不起作用吗 我遇到了一个常见的错误: Notice (8): Undefined variable: plans [APP/views/elements/search_dental_plans_results.ctp, line 12] Warning (2): Invalid
Notice (8): Undefined variable:
plans [APP/views/elements/search_dental_plans_results.ctp, line 12]
Warning (2): Invalid argument supplied for foreach()
[APP/views/elements/search_dental_plans_results.ctp, line 12]
这是我的代码:
home.ctp
为什么计划会被注释掉,为什么isset会出现在if中?试着退出;在返回之前,看看会发生什么,可能请求的默认设置为false,if应该是if$this->params['requested']或ifasset$this->params['requested']&&$this->params['requested']
我也不明白为什么要使用requestAction,根据您发布的代码,您几乎不应该使用requestAction,看起来您的问题不是由CakePHP中的任何内容引起的 未定义的变量是以前在代码中没有设置过的变量。但如果您的元素具有以下特性:
<?php $plans = $this->requestAction('plans/index'); ?>
<?php foreach($plans as $plan): ?>
这意味着美元计划正在制定中
在您的示例中,$this->requestAction可以返回任何内容,甚至什么都不返回,$plans变量仍然被认为是已定义的,您不会得到未定义变量的通知
所以我会试着找其他地方来解决这个问题。也许可以试着改变这一行:
<?php $plans = $this->requestAction('plans/index'); ?>
致:
看看这是否有效。还可以尝试检查语法。可能您遗漏了某个开始或结束标记。快速测试以查看它是否只是语法,但请尝试在“requestAction”函数中预加一个正斜杠
<?php $plans = $this->requestAction('/plans/index'); ?>
// @see - http://book.cakephp.org/view/434/requestAction
另外,就使用requestAction的适当性而言,我个人喜欢使用它来填充元素中的下拉列表和复选框数组等。它通过分离出一些表示逻辑来保持控制器代码的整洁,并使HTML编码器更容易处理
它在不经常更改的数据(如计划列表)上工作得最好,但缓存查询很重要,否则可能会降低性能。视图或元素的目的不是向控制器请求数据。控制器为视图提供数据
现在,索引操作没有任何作用。$plan从未分配任何内容,难怪您会收到错误消息。我以一种意外的方式解决了此问题,至少根据手册,此方法未被注意: 元素 控制器逻辑 工作起来很有魅力:虽然我打算在完成后使用一个可包含和缓存控件,但至少它能按预期工作
不太神圣,问题解决了:谢谢你的洞察力。出于这一确切原因,手册特别建议采取行动。我需要在布局中表单的元素中显示搜索结果,所以我认为这是最好的方法。将在我处理完之后更新。除非通过requestAction调用该操作,否则不会设置$this->params['requested'],在这种情况下,将其设置为1。所以检查它是否被设置实际上是一个很好的方法。
<?php $plans = $this->requestAction('plans/index'); ?>
<?php foreach($plans as $plan): ?>
<?php $plans = $this->requestAction('plans/index'); ?>
<?php $plans = array(1,2,3); ?>
<?php $plans = $this->requestAction('/plans/index'); ?>
// @see - http://book.cakephp.org/view/434/requestAction
$planDetails = $this->requestAction('/planDetails/pd_list');
foreach ($planDetails as $planDetail) :
function pd_list() {
return $this->PlanDetail->find('all');
}