cakePHP模型/控制器之间的调用功能

时间:2013-05-30 11:39:02

标签: function cakephp controller models

我是一个相对的新手,所以对你们大多数人来说这可能是显而易见的,但对我来说却不是这样!

我有3个型号(针对此问题)

Project,ProjectDataset和UserSessionDownload

Project中的视图调用控制器UserSessionDownloads在日志表中记录下载(由于Steve Moseley的帮助,这里运行良好),然后进行下载。要下载该文件,需要该文件的完整路径名。

然后,UserSessionDownload函数调用ProjectDataset的Model / Controller来获取所选ProjectDataset的文件名(由id标识)。

此文件名将用于获取相关文件。

代码部分如下: 在项目视图中:

echo $this->Html->Link('Add a Ref', array('controller'=>'UserSessionDownloads', 'action'=>'add_download',$project_dataset['id'],$project['Project']['id']));

在UserSessionDownloads中,函数“add_download”然后调用ProjectDataset中的函数(我已将ProjectDataset模型加载到此函数中):

$filename = $this->ProjectDataset->get_filename($this->request->params['pass'][0]);

(params指的是通过Project视图调用传入的数据集的id)

现在,我已尝试在模型和控制器文件中使用get_filename函数 - 但两者似乎都无法从project_datasets表中获取所需的数据集数据。

我尝试了很多组合 - 但显然不是正确的组合。

例如,如果我尝试在Controller中放置函数:

$this->set('projectDataset', $this->ProjectDataset->read(null, $id));
$filename = $this->projectDataset['dataset_filename'];

失败 - 说SQL不正确(甚至看起来不像sql!)

和此:

$this->set('project_dataset', = $this->ProjectDataset->find('first',array('conditions' => array('id' => $id)));
        $filename = $this->project_dataset['dataset_filename'];

报告SQL错误失败。

如果我把函数放在Model中,那么我会得到错误,说该对象不存在..

很抱歉这个问题很长,但是如果你知道有什么改变的话,我会很感激,或者如果你知道一些有用的东西,请给我一个例子。

由于

1 个答案:

答案 0 :(得分:0)

不确定您正在尝试使用此

$this->set('projectDataset', $this->ProjectDataset->read(null, $id));
$filename = $this->projectDataset['dataset_filename'];

但控制器操作中的$this->set()设置一个变量以供在视图中使用,而不是在控制器中进一步使用。 (除非你的意思是$filename在视图中)

其次,除非您先前已使用$this->ProjectDataset->read(null, $id),否则不会使用$this->projectDataset访问$projectData = $this->ProjectDataset->findById($id); $filename = $projectData['ProjectDataSet']['dataset_filename']; 的返回值。

从你的问题中抓住吸管,但我认为可能的解决方案可能是

在控制器

class ProjectDataset extends AppModel
{
    public function filename($id) 
    {
        $data = $this->findById($id);
        return $data['ProjectDataSet']['dataset_filename'];
    }
}

在模型中

$filename = $this->ProjectDataset->filename($id); 

然后在您的控制器中调用以下内容

{{1}}