2012-01-27 12 views
0

私はプラグインの名前が「Admin」で、メソッドはindex、addなどです。固有のモデル名とコントローラ名(ACL実装用)を適用したいので、すべてのコントローラとプラグイン名を持つモデル(cakephp plugin model/controller cache issue with main model/controllerを参照してください)。その後、次の問題に直面している。私はユーザーと呼ばれるテーブルがあり、私はcakephp2.0を使用しています。Cakephp Pluginのモデル名プレフィックス

1)domain.com/admin/admin_users/indexまたはadmin/content/admin_indexでURLにアクセスする必要があります。代わりにadmin/users/indexまたはadmin/content/indexからアクセスしたいと思います。すべての人に適用されるように一般的な方法でこれをルートに設定する方法は?

2)ビューでは、未定義のインデックスユーザーが表示されています(以前はビューを焼いたことがあります)。 AdminUserとしてすべてが来ています。 public $ alias = 'User'を設定すると、この問題は解決されました。これは正しいです ?

3)コントローラーでは、 "$ this-> User-> some var/fn"を$ this-> AdminUser-> some var/functionに変更する必要があります。これを解決する方法はありますか?

プラグイン名がadmin(私は管理用ルーティングを設定していません)として間違っていますか?

答えて

2

あなたはプラグインを管理者に安全に命名できます。これは決して予約語ではありません。しかし、モデル名/コントローラ名の解析時にCakeはプラグイン名を考慮しないため、実際には抽象AdminUserに属するクラスと見なされています(AdminUsersControllerAdminUser)。したがって、Cakeの魔法だけを使ってあなたの問題を解決するには、実際にUserとUsersControllerという名前をつけて、これらの名前が衝突しないようにしなければなりません。 the cookbook

2)Yups、あなたの場合にどのようにコントローラをエイリアスに

1)ルートの設定例の1つである:これはオプションがない場合は、これらのことを解決するために、独自の魔法の一部を提供することができます"User"をキーとして使用したい、それは正しいです。

3)$uses変数がエイリアシングをサポートしていないため、実際にはケーキマジックのみを使用していません。しかし、AdminUsersControllerで次のようなやり方で、2.0の新しい遅延ロードを利用することができます:

<?php 
public function __get($name) { 
    // Note, the isset triggers lazy-loading. Check out Controller::__isset() 
    // if you want to see how that works. 
    if ($name == 'User' && isset($this->AdminUser)) { 
     // Assign to admin user here to bypass the next time 
     return ($this->User = $this->AdminUser); 
    } 

    // Delegate to CakePHP's magic getter 
    return parent::__get($name); 
} 
+0

お返事ありがとうございました。私は最初のクエリのための解決策が必要です。私はたくさん試しましたが、何の解決策も得られませんでした – binoy

+1

コントローラのエイリアスをどういう意味ですか?私の答えでルート設定URLをチェックアウトした場合、そのページの "エイリアス"を検索した場合の例があります。あなたは '/ admin/users /:action/*'を 'array( 'controller' => 'admin_users'、 'plugin' => 'admin')'にマップしてAdminUsersControllerの望ましい結果を得ることができます。 adminプラグインのすべてのコントローラに対して自動的に実行したい場合は、おそらくカスタムルートクラスを使用する必要があります。 –