8

私は CodeIgniter でアプリに取り組んでおり、アプリケーション内のいくつかのオブジェクトの管理ページを作成したいと考えています。これらを MVC 構造に配置するためのより良い方法は何か疑問に思っています。

アイデア 1: 各コントローラーに管理機能を用意し、必要なすべての管理ページをその機能に追加します。URL の例:domain.com/articles/admin

アイデア 2 多くの異なるモデルを参照する必要がある新しい管理コントローラーを作成し、そこにすべての管理ページを配置します。URL の例:domain.com/admin/articles

どちらの方法が良いでしょうか?

明確化のために編集:管理機能とは、任意のオブジェクトに対して基本的な CRUD アクションを実行でき、そのオブジェクトのすべてのリストを表示できることを意味します。

4

7 に答える 7

6

少なくとも、間違いなく別のコントローラーです!

以前は、すべての管理機能を 1 つのコントローラーに収めることができると考えていましたが、プログラムが大きくなるにつれて、管理セクションに複数のコントローラーが必要であることに気付きました。

そのため、コントローラー フォルダー内に「admin」という名前のフォルダーを作成し、すべての管理コントローラーをそこに配置しました。したがって、私のフォルダーは次のようになります。

  • 応用
    • コントローラー
      • フロント.php
      • ようこそ.php
      • 管理者
        • ダッシュボード.php
        • useradmin.php
  • 等...

ただし、これによって発生する 1 つの問題は、ブラウザーにhttp://mysite.com/adminと入力すると、404 ページが返されることです。したがって、「application/config/routes.php」ファイルに移動して、カスタム ルートを追加します。

$routes['admin'] = 'admin/dashboard/index';
于 2009-11-10T13:33:17.437 に答える
2

個々のコントローラーの一部としてジャスティンをエコーし​​ます。

個々のコントローラーがログインできるユーザー(ユーザー名)とアクセスできるユーザー(管理者/メンバーなど)を使用できる、ある種の認証システムをセットアップする必要があります。これがCodeIgniterAuthClassesのSOスレッドです。

次に、ビューは条件付きで適切なリンクを表示し、コントローラーは、データをモデルに渡す前、または編集ビューをレンダリングする前に、認証をチェックすることによってポリシーを適用します。不正アクセスの場合、エラーが表示されるか、編集されていないビューで表示される可能性があります。

すべての機能が個々のコントローラーに格納されているため、このアプローチは(少なくとも私にとっては)最も理にかなっているようです。管理機能を単一の管理コントローラーに保持するということは、何か新しいものを追加する(または何かを削除する)たびに、2つのコントローラー(管理者と実際のコントローラー)を管理する必要があることを意味します。

すべてのコントローラーに認証チェックを配置することに関心がある場合は、すべての認証セットアップを使用して汎用コントローラークラスを作成し、コントローラーにそれを拡張させることができます。最終的に、個々のコントローラーの認証チェックは次のように簡単になります。

function edit()
{
    if(!$this->auth()){
        //display auth error, or forward to view page
    }
}

もちろん、ある種のACL実装はこれを改善するでしょうが、CodeIgniterが「公式」ACLを持っているとは思いません。

于 2009-11-10T01:57:58.477 に答える
2

controllers フォルダーに admin フォルダーを作成して、管理にアクセスできるようにすることをお勧めします (yoursite.com/admin/users など)。

すべての管理ニーズがそこにあり、次のようにユーザー権限をチェックすることですべてのメソッドが保護されます。

if ( ! $this->auth->logged_in(array('login', 'admin')))
{
    $this->session->set_flashdata('message', 'You do not have access to view this page');

    redirect('admin/users/login');
}

次に、「admin」フォルダー外のすべてのコントローラーは、サイトのタイプに応じて、表示のみになります。管理部分はありません。

于 2009-11-10T01:43:18.053 に答える
2

以下は、各方法の長所と短所の広範なガイドです。

http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter

于 2010-10-01T12:02:27.633 に答える
2

アイデア 2 の方が優れています。システム/アプリケーション/コントローラー/管理者

すべての管理コントローラーをここに保持します。

于 2009-11-10T13:44:03.897 に答える
0

個人的な選択のように見えますが、すべてを一元化するのが好きなので、管理コントローラーが私の賭けになるでしょう。

そうすれば、管理タスクを変更するときに 5 つの異なるコントローラーを開く必要がなくなります。

于 2009-11-09T21:32:53.973 に答える