cakePHP 调用方法语法


cakePHP calling methods syntax

我是cakePHP和OO编程的新手,这个问题对你们所有人来说似乎都很明显,但我还是会问它:

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

我想编写一个简单的函数,它只检查此字段的值并在视图部分 (index.ctp) 中显示真或假

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

    public function estClos() {
        if ($this->Dossier->field('bin_valide')==0) { return $this->true ; }
        else return $this->false;
    }
    
  • 如何调用此函数?(我在index.ctp视图页面中尝试了这样的事情:

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

我知道这似乎很容易,但我只是不知道我应该在哪里贴花这种方法,以及我应该如何访问它。谢谢。

与其试图将碎片粘合在一起,我建议您从对 MVC 和 CakePHP 的基本了解开始。

需要您了解 MVC 设计模式。查看此链接,了解一般设计模式,以及此链接了解 MVC。这个 github 存储库在 php 中提供了不同模式的示例。

还要从做 CakePHP 博客教程开始,而不是在没有阅读基础知识的情况下做一些事情来尝试和非结构化的试错方法。

控制器命名错误。控制器应命名为复数形式,因此应为DossiersController。模型始终是单数的。您应该遵循 CakePHP 编码标准。如果你不遵循它们,一些自动魔术将不起作用。

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

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 的基本了解,并防止因非结构化的试错尝试而感到沮丧:)。

将变量传递给您的视图,您可以从那里引用它。

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

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

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

首先,从dossiers表中获取所有条目(或根据需要向其添加条件):

// app/Controller/DossiersController.php
public function index() {
    // Find all the dossiers
    $dossiers = $this->Dossier->find('all');
    // Pass the found dossiers to your view
    $this->set(compact('dossiers'));
}

然后你会得到一个看起来像这样的数组:

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;

这将打印:

档案

的名称是:一些档案

有效:假

档案

的名称是:另一个档案

有效:真