将 MySQL 数据返回到 cakephp 视图

Posted

技术标签:

【中文标题】将 MySQL 数据返回到 cakephp 视图【英文标题】:Returning MySQL data to cakephp view 【发布时间】:2013-07-11 21:35:00 【问题描述】:

我对 cakephp 还很陌生,我正在努力写一个非常基本的声明。

在我的视图文件中,我想说如果事件表中的 is_open 列是真的,回显一些东西。如果不正确,请回显其他内容。

<?php
  if ($response['data']['Event']['is_open'] == true) 
     echo "Yes";
   else 

     echo "No";
  
 ?>

我无法在控制器中向后工作以首先获取数据。

在我的控制器中,我有这样的东西:

    public function some_function() 
    $events = $this->Event->find('all');

在我的视图文件中,我收到此错误:

注意(8):未定义索引:事件[View/Applications/agreement.ctp,第21行]

谁能指出我做错了什么?

我一直在阅读博客教程,有些地方对我来说很清楚,而在其他地方不清楚。我仍然遇到问题的地方是在视图中显示任何内容。

进一步阅读后,我想在控制器中做这样的事情:

$myVariable = $this->Event->find('first', 
   array( 'fields' => 'Event.is_open ', 
   'conditions' => array('Event.id =' => '400') )); 

我想说的是从 events.id = 400 的事件表中获取 is_open 值(稍后这个值将是动态的)这看起来是否正确? – mmalv 刚刚编辑

【问题讨论】:

提供 $events 的调试,您可能会自己看到哪里出了问题 请提供一个工作/完整的例子。您在问题中指的是$response$events$myVariable - 无法将它们联系在一起。 【参考方案1】:

你是怎么想到$response['data']的?

在您的EventsController 中,您正确地将$this-&gt;Event-&gt;find('all') 的返回值设置为$events。为了让这个变量在你的视图中可用,你需要像这样调用Controller::set

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

或者更简单,一步,你可以做到:

$this->set('events', $this->Event->find('all'));

然后在您的事件视图中(可能像View/Events/index.ctp 这样的地方)访问名称为$events 的变量。它应该是格式

Array(
  [0] => Array(
    'Event' => Array(
      'id' => 1,
      'name' => 'An open name!',
      'is_open' => true
    )
  ),
  [1] => Array(
    'Event' => Array(
      'id' => 1,
      'name' => 'Another event but closed',
      'is_open' => false
    )
  )
)

所以现在您需要在视图中运行如下循环:

foreach ($events as $key => $value) 
  if ($value['Event']['is_open']) 
    echo "Yes";
   else 
    echo "No";
  

所有这一切都在食谱中进行了详尽的解释,只需阅读博客教程即可。

【讨论】:

我一直在阅读博客教程,有些地方对我来说很清楚,而在其他地方不清楚。我仍然遇到问题的地方是在视图中显示任何内容。进一步阅读后,我想在控制器中做这样的事情: $myVariable = $this->Event->find('first', array( 'fields' => 'Event.is_open ', 'conditions' => array( 'Event.id =' => '400') ));我想说的是从 events.id = 400 的事件表中获取 is_open 值(稍后这个值将是动态的)这看起来是否正确? 当然有可能——而且很简单!您似乎需要更多时间来掌握所有内容,放轻松并尝试理解示例,而不是仅仅将它们复制过来并在结果上猛烈抨击。如果您已经知道您的 ID(并且它是有效的),则将其设置为模型,例如:$this-&gt;Event-&gt;id = 400; 然后您的模型将包含该记录的数据,您只需要类似:$isOpen = $this-&gt;Event-&gt;field('is_open'); 不要忘记@987654334 @it 使其在您的视图中可用。 另外,如果您还没有启用 DebugKit 并使用 debug(); 查看返回或包含在您的变量中的内容。在 view 中,如果您 debug($this-&gt;_viewVars()); 您可以查看从控制器传递到视图的内容。

以上是关于将 MySQL 数据返回到 cakephp 视图的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP4 Ajax:从控制器发送到视图

将数据从 cakephp 视图传递给控制器

cakephp 在不使用视图的情况下保存 HABTM 关系的数据

Cakephp,将视图添加到侧边栏

Cakephp 从另一个视图中检索 id

CakePHP将数据导入到没有模型的表中