0

私は 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 Viewページで次のようなことを試しました:

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

これは非常に簡単に思えますが、そのようなメソッドをどこに宣言する必要があるのか​​ 、どのようにアクセスする必要があるのか​​ わかりません。どうもありがとうございました。

4

3 に答える 3

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;

これは印刷されます:

ドシエの名前は次のとおりです。

有効: false

ドシエの名前は次のとおりです。別のドシエ

有効: true

于 2013-10-21T12:15:31.613 に答える
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 に答える