3

特定の状況でアクション/ビューを作成する場所を決定するためのベストプラクティスのアプローチは何であるかを考えていました。

ユーザーが多くのビデオを持っている場合

ユーザーの動画を表示するためのアクション/ビューを作成するのに最適な場所はどこですか?

したがって、ユーザーアカウントページの[マイビデオ]リンク内にありますか

  1. users/my_videosアクションを作成して表示するだけです。
  2. videos/my_videosアクションを作成して表示します。
  3. または、ほとんどの場合、検索機能を備えたコントローラー/ビデオのアクション/インデックスがすでにあります。この受け渡しを使用するだけで、ユーザーIDを渡すことができます。

どんな考え/アドバイスも大歓迎です

ありがとう

レオ

4

5 に答える 5

3

考えられるオプションの1つは、次のことを行うことです。

ビデオには、どのユーザーがどのビデオを検索するかという単純なコードよりもはるかに多くのコードが含まれている可能性があるため、VideosControllerでビデオリストアクションを実行する必要があります。

過去のプロジェクトでは(CakePHP 1.3で)これに対処するためにプレフィックスルーティングを使用しました。

config / core.phpで、routing.prefixesが「user」プレフィックスを含むように有効にしていることを確認してください。

<?php
    ... in routes.php ...
    Routing.prefixes = array( 'user' );
?>

ビデオコントローラーで、次の署名を使用してアクションを実行します。

<?php
    ...
    public function user_index( $userID = null ){
        ...
    }
?>

また、ユーザービデオのリストにリンクするビューでは、html::link呼び出しは次のようになります。

<?php
    ...
    echo $this->Html->link( 'User\'s Videos', array(
        'controller' => 'videos',
        'action' => 'index',
        'prefix' => 'user',
        $this->Session->read( 'Auth.User.id' )
    ));
?>

もちろん、これは、ログインしたユーザーを追跡するためにここでAuthコンポーネントを使用していることを前提としています。認証されたユーザーIDを読み取るためのセッションヘルパーコードは、微調整が必​​要な場合があります。

これにより、a)プレフィックスルーティングを有効にする以外にルーティングについてあまり心配する必要がなく、b)次のようなきれいなリンクをすばやく作成できます--site.com/user/videos/index/419

これをいくつかのスラッグ愛と組み合わせてください(これは私が見た中で最高のリンクです-dbレイヤーにスラッグフィールドは必要ありません-http: //42pixels.com/blog/slugs-ugly-bugs-pretty-urls

非常に簡単に次のようなURLになってしまう可能性もあります:site.com/user/videos/index/eben-roux

app / config / routers.phpを少し編集するだけで、/ index /の部分を削除でき、 site.com / user / videos/eben-rouxの形式でSEOやユーザーフレンドリーな結果が得られます。

http://book.cakephp.org/view/945/Routes-Configuration

于 2011-05-24T23:19:47.003 に答える
0

いつものように、コードには次の2つの極端な点があります。

1)すべてを1つのコントローラーに入れる

2)すべてのアクションを別々のコントローラーに入れる

理想的なアプローチは、ほとんどの場合、2つの間のどこかにあるので、何をグループ化し、何を分離するかをどのように決定するのでしょうか。

MVCでは、ビューを見て共通点を確認する傾向があります。ご指摘のとおり、ユーザーはモデル内のビデオのコレクションへの参照を持っていますが、単一のビューに両方のデータセットが必要ですか?つまり、この例では、ユーザーの詳細を管理し、ビデオのリストを表示するページが表示される可能性がありますか?そうでない場合は、別のコントローラーをお勧めします。

どちらかのコントローラーが非常に単純な場合(たとえば、1つの方法)、2つをマージすることを検討する価値があります。

于 2011-05-20T10:19:54.363 に答える
0

私は物事を分離しておくのが好きです。

私がすることは、ビデオコントローラーのインデックスアクションであり、引数としてユーザーのIDを渡し、現在のユーザーのビデオのみを表示します。

public function index($id = null){
   $this->paginate = array( 'conditions'=> array('Video.user_id' => $id));
   $this->set('videos', $this->paginate());

}
于 2011-05-20T14:51:48.443 に答える
0

私の考えは、それはあなたがコントローラーに割り当てる責任に依存するということです。

ユーザーやビデオコントローラーのようなものは、それらのエンティティのみに関係する必要があると言えます。

コメントでDunhamzzzがほのめかしているように、UserDashboardのようなもの(または類似しているが適切な名前が付けられているもの)を検討することをお勧めします。これにより、「エントリ」の観点からすべての機能を統合できます。バナー/ショートカット/アクションメニューが機能するのと同じように。

UserDashboardは、関連するデータ(IVideoRepositoryやIVideoQueryの実装など)を取得するために必要なデータレイヤー/リポジトリを使用します。

通常、何かが正しく感じられないときはそうではありません。それを分割してみて、それがどのように機能するかを確認してください。後でいつでも再配置/リファクタリングできます。

ちょっとした考え。

于 2011-05-24T08:27:43.167 に答える
0

この質問に対する「万能」の解決策はないと思いますが、私はあなたが扱っている主な目的が何であるかを決定し、アクションを追加するアプローチをとろうとします/そのオブジェクトのコントローラーを表示します。

あなたの例では、メインオブジェクトはビデオであり、必要なアクションは特定のプロパティ(この場合はユーザーのIDですが、これはカテゴリ、場所など)。

私がしないことの1つは、機能を配置するコントローラーを目的のURLに決定させることです。URLはルートによって簡単に変更されます。

于 2011-05-24T09:52:06.187 に答える