我是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();
我知道这看起来很容易,但我无法弄清楚我应该去哪里这样的方法,以及我应该如何访问它。非常感谢你。
答案 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