[英]cakePHP calling methods syntax
我是CakePHP和OO編程的新手,這個問題對所有人來說都非常明顯,但是我還是要問一下:
我有一個名為“ Dossier”的模型,該模型從包含各種字段的SQL表中獲取數據,其中的一種是稱為“ bin_valide”的int(1)(布爾)類型。
我想編寫一個簡單的函數,僅檢查該字段的值並在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();
我知道這似乎很容易,但是我只是想不出應該在哪里刪除這種方法,以及應該如何使用它。 非常感謝你。
建議您從對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;
這將打印:
檔案的名稱是:一些檔案
有效:假
檔案的名稱是:另一個檔案
有效:正確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.