cakePHP调用方法语法

cakePHP调用方法语法,php,oop,cakephp,Php,Oop,Cakephp,我是cakePHP和OO编程新手,这个问题对大家来说都很明显,但我还是要问: 我有一个名为“Dossier”的模型,它从包含各种字段的SQL表中获取数据,其中有一个名为“bin_valide”的int(1)(布尔)类型 我想写一个简单的函数,只检查这个字段的值,并在视图部分(index.ctp)显示true或false 我应该在哪里声明这样的函数(看起来像这样,我把这段代码放在model Dossier.php页面中,但也许它应该放在DossierController.php中…(这里不确定)

我是cakePHP和OO编程新手,这个问题对大家来说都很明显,但我还是要问:

我有一个名为“Dossier”的模型,它从包含各种字段的SQL表中获取数据,其中有一个名为“bin_valide”的int(1)(布尔)类型

我想写一个简单的函数,只检查这个字段的值,并在视图部分(index.ctp)显示true或false

  • 我应该在哪里声明这样的函数(看起来像这样,我把这段代码放在model Dossier.php页面中,但也许它应该放在DossierController.php中…(这里不确定)

  • 如何调用此函数?(我在index.ctp视图页面中尝试了类似的操作:

    echo $dossier['Dossier']['commentaire'];
    
    echo $dossier->estClos();
    

我知道这看起来很简单,但我就是不知道应该在哪里使用这种方法,以及应该如何访问它。非常感谢。

将变量传递给视图,您可以从此引用它

public function view_action() {
   $value = false;
   if ($this->Dossier->field('bin_valide')==0) {  $value = true; }
    $this->set('myValue', $value);
}

然后,您可以在视图中引用myValue变量。

您不应该在视图中调用任何函数,控制器是准备要在视图中使用的所有数据的地方。在这种情况下,我只是将数据集中的整数转换为视图中的布尔值

首先,从
档案
表中获取所有条目(或在需要时添加条件):

然后您将得到一个数组,该数组类似于:

0 => array( // First dossier
    'Dossier' => array(
        'id' => 1,
        'name' => 'Some dossier',
        'bin_valide' => 0
    )
),
1 => array( // Second dossier
    'Dossier' => array(
        'id' => 2,
        'name' => 'Another dossier',
        'bin_valide' => 1
    )
)
在您看来,您可以简单地在档案上循环:

// app/View/Dossiers/index.ctp
foreach ($dossiers as $dossier):
    echo '<p>The name of the dossier is: ' . $dossier['Dossier']['name'] . '</p>';
    echo '<p>Valid: ' . (bool)$dossier['Dossier']['bin_valide'] . '</p>';
endforeach;
//app/View/Dossiers/index.ctp
foreach($dossiers as$dossier):
echo'档案的名称为:'.$dossier['dossier']['name'].

'; 回音“有效:”(bool)$dossier['dossier']['bin_valide'].

”; endforeach;
这将打印:

档案的名称是:一些档案

有效:假

档案的名称是:另一份档案

有效:正确


我建议您从基本了解MVC和CakePHP开始,而不是试图将各个部分粘在一起

这是你必须理解的。检查一下一般的设计模式和。并且有php中不同模式的例子

也可以从CakePHP开始,而不是尝试非结构化的试错方法,在没有阅读基础知识的情况下做一些事情

您的控制器命名错误。控制器应命名为复数,因此应命名为DossiersController。模型总是单数的。您应遵循。如果不遵循,某些automagic将无法工作

所有数据操作和获取都应该进入模型

public function getStatus() {
    return $this->Dossier->field('bin_valide');
}
您的控制器就像一个管理器,从模型中获取数据并将其返回到视图。它基本上只处理您的请求。模型也比控制器更容易测试,基本规则是您需要胖模型和瘦控制器。控制器只会将数据设置到视图:

public function status() {
    $this->set('status', $this->Dossier->getStatus());
}
在您看来,简单地用它做点什么:

if ($status === 1) { echo 'Yes'; } else { echo 'No'; }

帮你自己一个忙,先做博客教程,它会让你对CakePHP有一个基本的了解,并防止因非结构化的尝试和错误而受挫。:)

谢谢你的快速回答。但让我们想象一下,该字段稍微复杂一些:类似于int字段“type”,我想将以下单词关联起来:-type=1:“apples”-type=2:“pears”-type=3:oranges等等。我应该在哪里声明这样一个函数,在控制器中以某种方式“准备”数据?不是吗cakePHP的关联可能性意味着什么,一个包含这些方面的称为“类型”的模型?
public function status() {
    $this->set('status', $this->Dossier->getStatus());
}
if ($status === 1) { echo 'Yes'; } else { echo 'No'; }