1

CakePhp 2.x を使用しています。私は3つの列を持っています:

ユーザー | コース | ユーザーコースロール

各ユーザーは複数のコースを編集でき、1 つのコースを複数のユーザーが編集できます。ここまでは順調ですね。

ユーザーがすべてのコースのインデックスを見たい場合は、実際に編集できるコースの横にのみ「編集」リンクを表示したいと考えています。 どうすればこれを実現できますか? CourseController 内にある種の追加フィールドを設定し、ビュー内でこのフィールドを確認する必要があると考えました。これは正しい方法ですか?

私の現在のコードは

CourseController.php

...
public function index() {
        $courses = $this->Course->find('all', array('recursive' => 2));

         $this->set('courses', $courses);
    }
...

コース/index.ctp

<!-- File: /app/View/Courses/index.ctp -->
...
<?php foreach ($courses as $course):?>
    ...
    <?php 
        echo $this->Html->link('edit', array('action' => 'edit', $course['Course']['id']));     
   ?>
   ...
4

2 に答える 2

1

beforeRender() または beforeFilter() で、 $this->Auth->user() を変数としてビューに設定します。たとえば、userData として設定します。

$this->set('userData', $this->Auth->user());

その変数を使用する (auth) ヘルパーを実装し (ヘルパー設定として構成可能にすることができます)、次のようなチェックを行います。

if ($this->Auth->hasRole($course['Course']['role']) { /* ... */ }
if ($this->Auth->isLoggedIn() { /* ... */ }
if ($this->Auth->isMe($course['Course']['user_id']) { /* ... */ }

特定の要件が何であれ、hasRole() メソッドを実装します。

これを一連の利点としてヘルパーとして行うと、再利用、オーバーロード、およびチェックが何であれ適応するのが簡単になり、ビューでコンポーネントを使用しないことに加えて、アプリで静的およびシングルトンを頻繁に呼び出さないようにする必要があります。また、コードが何をするのかを読んで理解するのはとても簡単です。

于 2013-08-26T13:02:24.853 に答える