1

フロントエンド(ユーザー)用と管理者ユーザー用の2つのアプリケーションフォルダーを含むCIWebサイトがあります。

/ Applications / front /
/ Applications / admin /

内部には、の/applications/front/helpers/ようないくつかのクラスがMY_url_helper.phpあり、これを管理領域で使用したいので、同じ正確なコードが /applications/admin/helpers/MY_url_helper.phpあります。つまり、コードを変更すると、2つの場所にあります。

ご想像のとおり、これはSOOの多くのルールに反します。CIを使用する単一のWebサイトで2つのアプリケーションと同じヘルパー/ライブラリを共有するためのより良い方法は何ですか?

4

1 に答える 1

-1

さて、あなたにはいくつかのオプションがあります:

  • 物事をそのままにして、「ルールを破る」ことを心配しないでください。最終的には、管理/コントロールパネルにフロントエンドとは非常に異なるコードベースが必要になることに気付くでしょう。そのため、異なるコードを記述してしまうと、重複は問題になりません。

  • 両方のアプリケーションを1つに統合します。これにより、重複の問題は解決されますが、各ライブラリまたはヘルパーのバランスを取り、両方の環境で適切に機能する必要があるなど、他の問題が発生します。これに関する私の経験はここでより詳細に公開されており、CI開発者のPhil Sturgeonによるブログ投稿があり、このプラクティスを実装する方法をここに要約しています:http: //philsturgeon.co.uk/blog/2009/07/Create- an-Admin-panel-with-CodeIgniter

  • これは私が使用したことのないものですが、有望に見えます:パッケージ。

アプリケーション「パッケージ」

アプリケーションパッケージを使用すると、独自のライブラリ、モデル、ヘルパー、構成、および言語ファイルを備えた、リソースの完全なセットを1つのディレクトリに簡単に配布できます。これらのパッケージは、application/third_partyフォルダーに配置することをお勧めします。

ディレクトリの使用に関する推奨事項に関係なく/third_party、これ任意のディレクトリを選択できます。

以下は、「FooBar」という名前のアプリケーションパッケージのディレクトリの例です。/ application / third_party / foo_bar

config /
ヘルパー/
言語/
ライブラリ/
モデル/

「FooBar」アプリケーションパッケージの目的が何であれ、独自の構成ファイル、ヘルパー、言語ファイル、ライブラリ、およびモデルがあります。コントローラでこれらのリソースを使用するには、最初に、パッケージパスを追加して、パッケージからリソースをロードすることをローダーに通知する必要があります。$this->load->add_package_path()

パッケージパスを追加すると、ローダークラスは、後続のリソース要求のために特定のパスを追加するように指示されます。例として、上記の「Foo Bar」アプリケーションパッケージには、Foo_bar.phpという名前のライブラリがあります。私たちのコントローラーでは、次のことを行います。

$this->load->add_package_path(APPPATH.'third_party/foo_bar/'); $this->load->library('foo_bar');

詳細については、ローダーのドキュメントで説明されています:http: //codeigniter.com/user_guide/libraries/loader.html

繰り返しになりますが、Phil Sturgeonによる、それがどのように機能するかを理解するのに役立つ可能性のある別の投稿があります:http: //philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

ここでの考え方は、リソースをロードするためのフォールバックとして使用される3番目の「アプリケーション」フォルダー(「パッケージ」)を持ち、他のアプリケーションのいずれかに一致するものを配置することでファイルをオーバーライドできるようにすることです。そのため、共有リソースをオーバーライドできる柔軟性を備えた共有リソースのメリットを享受できます*。

*これは、私がドキュメントを読んでいることを前提としています。私はこれをテストしていないので、さらに多くのことがあるかもしれません。

パッケージディレクトリを他の2つのアプリケーションフォルダの隣に配置し、次のMY_Controller::__construct()ように参照することをお勧めします。

$this->load->add_package_path(FCPATH.'my_package_name/');

私はまだパッケージを使用していませんが、この投稿を書いた後、次のプロジェクトのためにそれをチェックしたいと思っています。

于 2011-08-21T03:29:06.280 に答える