5

CakePHP1.2で作成したCakePHPアプリのオーバーホールに取り組んでいます。1.3にアップグレードし、アプリケーションの管理ルーティングパラダイムからの移行を検討しています。フロントエンドと管理者の機能が重複しているため、一部のコントローラーが非常に大きくなっていることがわかりました。私の直感では、管理コントローラーのセットを作成し、管理ルーティングをすべてまとめて削除する方がはるかにクリーンですが、他のユーザーが行っていることや、もしあれば、見逃してしまう機能についての情報を入手したかったのです。ルーティングを削除します。

この点で、堅牢なCakePHPアプリ(または他のMVCフレームワーク)のベストプラクティスと見なされるものは何ですか?

4

5 に答える 5

1

フロントエンド アプリケーションと管理者を単純に 2 つの別個のアプリケーション (/app/admin) に分離することをお勧めします。admin は単純なフロントエンド アプリケーションであり、データベースですべての「汚い」作業を行うものと考えてください。

そうすることで、URL の /admin プレフィックスを使用して管理者にアクセスするか、DocumentRoot を /admin/webroot に設定し、サブドメイン (つまり、admin.myapp.com) を使用して管理者にアクセスできます。

モデル コードの重複を避けるために、モデルを共有フォルダー (つまり/vendors/core/models) に配置し、このパスをbootstrap.phpファイル内のモデル パスに追加することができます ( App::build('models' => array(VENDORS . 'core/models/'))CakePHP 1.3 の場合$modelPaths = array(VENDORS . 'core/models/')、CakePHP 1.2 の場合)。

管理者またはアプリ固有のものをモデルに追加するには、コア モデルをロードして拡張することにより、/models でコア モデルを拡張できます。

App::import('Model', 'CoreModelName');

class CustomCoreModelA extends CoreModelA
{
    function specificMethod() {}
}

これは、共有コンポーネント、動作などに対して行うことができます。

于 2010-09-03T05:53:58.673 に答える
1

管理者ルーティングを使用してアプリを作成しましたが、not バージョンは常にめちゃくちゃです。一部のメソッドが同じである場合は、次のことができます。

function add(){
$this->_add();
}

function admin_add(){
$this->_add();
}

function _add(){
... your code ...
}

すべてのコードが同じであるとは限らず、管理ルーティングを使用しないと、多くのコードが実行されることになりますif(... is admin ...) { echo 'blaa'} else { echo 'foo'; }

于 2010-10-14T11:43:26.870 に答える
0

アプリケーションに ACL を使用しましたが、管理ルーティングを使用するよりもはるかに優れていることがわかりました。そのはるかに簡単です。本当にプレフィックスが必要な場合は、通常のルーティングでそれを行うことができます。

于 2010-08-05T16:03:09.547 に答える
0

シナリオに合わない場合は、管理ルーティングを気にしないでください。私もそれを使用していません。管理パスが私のアプリに適合しません。コードを複製することは、まったく無駄な作業です。

きめ細かなロールに ACL ルールを使用するか、コントローラーの beforeFilter() またはアクションの最初の行でロール (管理フラグ) をチェックするだけです。

アクションの最初の行で呼び出されるコンポーネント関数 checkRole(array()) があります。現在のユーザーが指定されたロールを持っていない場合、リクエストをログに記録して終了します。

于 2010-07-16T22:27:33.033 に答える
0

次に、実際の管理者向けに ACL/ロールを使用し、運用環境ではおそらく管理ルーティングを使用しません。私は時々、低レベルの管理者用のスキャフォールディングされた (最小限の余分なコード) 管理者ルーティングを保持し、私だけがアクセスできるようにしますが、堅牢な運用アプリではおそらく賢明ではありません。

コメントの後に編集:最適ではありませんが、URL に必要なように表示されるものをまとめたり、フォルダーに整理したりできる場合があります。まだテストできていませんが、アイデアは次のとおりです。

コントローラーフォルダーに「admin」フォルダーを作成し、ユーザー管理者用に users_admin_controller.php コントローラーファイルを作成します。それらはフォルダー構造を折りたたむため、ルートディレクトリと同じ名前を付けることはできませんが、それらをフォルダーに分けることはできます。

これはデフォルトで/admin_users/add型の状況を行いますが、それは 2 番目の部分であるいくつかのルーティングで微調整できます:

Router::connect('/admin/users/:action', array('controller'=>'admin_users'))

これは管理セクションごとに行う必要があります - 理想的ではありませんが、Cake コードを変更しない限り、より良い方法を見つけることはできません。

于 2010-07-16T23:42:53.257 に答える