传递数据以查看 CakePHP
Posted
技术标签:
【中文标题】传递数据以查看 CakePHP【英文标题】:passing data to view CakePHP 【发布时间】:2012-12-04 21:39:26 【问题描述】:这可能很容易,但我尝试了一些想法但根本没有解决方案,我不是 cakephp 专家,但我正在尝试在有限的时间内修改现有项目。
问题是我有一个名为“centro”的实体,但我在另一个控制器“rw”上使用它的模型,但我根本无法让它将该数据传递给视图;似乎是因为当我使用重定向返回“索引”时变量被删除了。
我需要这些数据来生成谷歌地图,$this->set(.....) 方法不起作用。
这是“rw”控制器的代码。
<?php
class RwController extends AppController
var $name = 'Rw';
// var $paginate = array(
// 'Tip' => array(
// 'limit' => 1,
// 'order' => array(
// 'tip.created' => 'desc'
// ),
// ),
// 'Evento' => array(
// 'limit' => 1,
// 'order' => array(
// 'evento.fecha' => 'desc'
// ),
// )
// );
function map()
$this->helpers[]='GoogleMapV3';
function pageForPagination($model)
$page = 1;
// $chars = preg_split('/model:/', $this->params['url']['url'], -1, PREG_SPLIT_OFFSET_CAPTURE);
// #print_r($chars);
// if(sizeof($chars) > 1 && sizeof($chars) < 3)
// #echo "Belongs to ".$model.": \n";
// #echo var_dump($chars);
//
// $params = Dispatcher::parseParams(Dispatcher::uri());
// echo "<p>".var_dump($params)."</p><br />";
#echo $this->params['named']['model'].$model;
#echo $this->params['named']['page'];
$sameModel = isset($this->params['named']['model']) && $this->params['named']['model'] == $model;
$pageInUrl = isset($this->params['named']['page']);
if ($sameModel && $pageInUrl)
$page = $this->params['named']['page'];
else
#echo var_dump($this->passedArgs);
$this->passedArgs['page'] = $page;
return $page;
function index()
$this->loadModel('User');
$this->loadModel('Evento');
$this->loadModel('Tip');
$dataEvento = $this->Evento->find('all');
$dataTip = $this->Tip->find('all');
$page = $this->pageForPagination('Evento');
$this->paginate['Evento'] = array(
'contain' => false,
'order' => array('Evento.fecha' => 'desc'),
'limit' => 1,
'page' => $page
);
$dataEvento = $this->paginate('Evento');
$page = $this->pageForPagination('Tip');
$this->paginate['Tip'] = array(
'contain' => false,
'order' => array('Tip.created' => 'desc'),
'limit' => 1,
'page' => $page
);
$dataTip = $this->paginate('Tip');
$this->set('users', $this->User->find('all'));
$this->set('eventos', $dataEvento);
$this->set('tips', $dataTip);
$this->set('rw');
if(isset($this->params['named']['model']))
if (strcmp($this->params['named']['model'], 'Evento') == 0)
if($this->RequestHandler->isAjax())
$this->render('/elements/ajax_rw_evento_paginate');
return;
elseif (strcmp($this->params['named']['model'], 'Tip') == 0)
if($this->RequestHandler->isAjax())
$this->render('/elements/ajax_rw_tip_paginate');
return;
function about($id = null)
$this->Rw->recursive = 0;
$this->set('rw', $this->paginate());
function beforeFilter()
parent::beforeFilter();
$this->Auth->allow(array('*'));
function getCentros($id = null )
$this->loadModel('Centro');
$this->log('getcentros','debug');
$this->log('el id'.$id,'debug');
if( sizeof($id) > 1)
$this->set('centros', $this->Centro->query("SELECT centros.id, name, latitud ,longitud
FROM `centros`,`centrosmateriales`
WHERE centros.id = centro_id
AND material_id ='".$id[0]."'
OR material_id='".$id[1]."'"));
$this->log('size id > 1 ','debug');
elseif( sizeof($id) >0)
if($id == 0)
$this->set('centros', $this->Centro->find('all'));
else
$this->set('centros', $this->Centro->query("SELECT centros.id, name, latitud ,longitud
FROM `centros`,`centrosmateriales`
WHERE centros.id = centro_id
AND material_id ='".$id[0]."'"));
$this->Session->write('saludos', 'Saludando');
$this->redirect(array('action' => 'index'));
?>
我一直在考虑ajax,但我不确定。
无论如何,提前致谢。
【问题讨论】:
【参考方案1】:使用redirect()
会向浏览器发送一个实际的HTTP 重定向。这会导致浏览器向服务器发送另一个请求,发送到它被重定向到的 URL。
您传递给set()
的数据仅在单个CakePHP 请求周期内可用。之后,所有 PHP 数据都会从内存中擦除。将数据传递给下一个请求的唯一方法是在 URL 或会话中。
在您的情况下,您应该重新考虑您的设计和set()
index()
操作中您需要的所有数据。您可以将 getCentros()
中的逻辑移动到您的 Centro
模型中。然后,在您的 index()
函数中,您可以这样做
$this->set(
'centro',
$this->Centro->getCentros();
);
【讨论】:
以上是关于传递数据以查看 CakePHP的主要内容,如果未能解决你的问题,请参考以下文章