0

我是 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();
    

我知道这看起来很容易,但我只是不知道我应该在哪里贴上这种方法,以及我应该如何访问它。非常感谢你。

4

3 回答 3

1

我建议您先对 MVC 和 CakePHP 有一个基本的了解,而不是试图将各个部分粘合在一起。

要求您了解MVC 设计模式。检查这个关于设计模式的链接和这个关于 MVC的链接。这个 github repo有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 有一个基本的了解,并防止因非结构化的试错尝试而感到沮丧。:)

于 2013-10-21T17:22:46.633 回答
0

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

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

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

于 2013-10-21T12:14:53.163 回答
0

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

首先,从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;

这将打印:

档案的名称是:一些档案

有效:假

卷宗的名称是:另一个卷宗

有效:真

于 2013-10-21T12:15:31.613 回答