6

AppControllerとアプリの他のコントローラーの間に別の抽象化コントローラーを追加することはどういうわけか可能かどうか疑問に思っていましたか?

そのため、私のコントローラー、たとえば、UsersControllerはSecureControllerを拡張し、SecureControllerはAppControllerを拡張します。

また、他のコントローラーでAppControllerを直接拡張できるようにしたいです。SomeNonSecureControllerはAppControllerを拡張します。

これは、現在のAppControllerのbeforeFilterにあらゆる種類のAuthとACLが含まれているためですが、そのセキュリティを必要としないコントローラーもあります(すべてがセキュリティを必要とする前に、新しい仕様は追加されていません)。多くのコントローラーはそれを必要とします、それはすべての必要なコントローラーにコードをコピーして貼り付けることは意味がありません。

私は考えていましたが、beforeFilterのセキュリティはすべてSecureControllerに組み込まれています。そうすれば、セキュリティを必要とするコントローラーは簡単に拡張でき、他のコントローラーはAppControllerから直接継承します。

このようなことをどのように進めますか?

ケン、よろしくお願いします。

4

2 に答える 2

6

私の最初の考えは、beforeFilterの機能の一部をコンポーネントに抽象化できるかどうかを確認することです。コンポーネントは他のコンポーネントも使用できることを忘れないでください。コンポーネントの$ componentsプロパティに含めるだけで、AuthComponentやAclComponentなどにアクセスできます。

これが適切でない場合、私はあなたのルートに行きます、それをするために、ただinclude('secure_controller.php'); ファイル内の個々のコントローラークラス宣言の前。

すべてのプロジェクトで使用するBaseControllerを作成して、同様のことを行いました。これにより、標準のすべての管理者CRUDアクションが提供されます。次に、AppControllerにこれを拡張させます。これには、アプリケーション固有のコントローラー全体の機能が含まれています。その後、個々のコントローラーがそれを拡張し、実質的に空になります。私がするのは:

// app/base_controller.php
<?php class BaseController extends Controller {} ?>

// app/app_controller.php
<?php
include('base_controller.php');
class AppController extends BaseController {}
?>

// app/controllers/my_controller.php
<?php class MyController extends AppController {} ?>
于 2009-12-09T21:12:44.480 に答える
1

私もこれを試みています。コントローラを他のコントローラで拡張するのは比較的簡単なようです。Cake 2.0では、import()ステートメントを使用するだけです(include()は同様のことを行います)。

App::import('Controller', 'Security');
class SecureAreaController extends SecurityController {
    // extra functionality *not* in base class goes here
}
于 2011-12-07T22:59:32.140 に答える