cakePHP调用方法语法

时间:2013-10-21 11:58:44

标签: php oop cakephp

我是CakePHP和OO编程的新手,这个问题对你们所有人来说都很明显,但无论如何我都会问:

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

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

  • 我在哪里声明这样的函数(看起来像这样的东西,我把这个代码放在模型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();
    

我知道这看起来很容易,但我无法弄清楚我应该去哪里这样的方法,以及我应该如何访问它。非常感谢你。

3 个答案:

答案 0 :(得分:1)

我建议您首先要了解MVC和CakePHP,而不是尝试将各个部分粘合在一起。

您需要了解the MVC design pattern。检查this link一般的设计模式和this link about MVC。而且this github repo在php中有不同模式的例子。

首先做CakePHP blog tutorial而不是尝试和非结构化的试错方法,做一些事情而不阅读基本知识。

您的控制器名称错误。控制器应该被命名为复数,所以它应该是DossiersController。模型总是单一的。你应该遵循CakePHP coding standards。如果你不遵循它们,一些自动化将不起作用。

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

这将打印:

  

档案的名称是:一些档案

     

有效:错误

     

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

     

有效:true