序章

CodeIgniter は、非常に強力でありながら使いやすい、無駄のないPHPWebアプリケーションフレームワークです。 これは、一連のライブラリとヘルパー関数を提供して、人々がアプリケーションをはるかに高速に開発できるようにします。 このために、オブジェクト指向プログラミング(OOP)技術とModel-View-Controller(MVC)アプローチを使用して、プレゼンテーションをロジックから適切に分離します。 さらに、CodeIgniterはクリーンURLを使用して、誰も気に入らないような醜いクエリ文字列で埋められたURLを回避します。

この記事は、開発環境にCodeIgniterがすでにインストールされており、データベースとURLの初期構成が行われていることを前提としています。 すばやくセットアップする方法の詳細については、このチュートリアルを参照してください。

Model-View-Controller(MVC)アプローチ

MVCプログラミングアプローチは、プレゼンテーションをロジックから分離することを目的としています。 これは、他のファイルで個別に保持されるため、PHPスクリプトをあまり使用せずにWebページを作成できることを意味します。 これは、開発者と設計者の両方がアプリケーションに取り組んでいる場合に特に役立ちます。後者の方が、フロントエンド部分の作成に非常に簡単です。

CodeIgniterでは、モデルとコントローラーは基本的にPHPクラスであり、デフォルトのCIクラスから拡張されていますが、宣言する必要があります。 それらは別々のファイルに保存されます(各コントローラーまたはモデルには独自のファイルがあります)。 一方、ビューは、ページを構築し、最小限のPHPコードのみを含む単純なHTMLページ(拡張子は.php)です。通常、変数の印刷とループの実行に制限されます(使用するテンプレートエンジンによって異なります)。 必要に応じて、ビューを他のビューに含めることもできます。

モデルは、データベースクエリ、計算など、大量のスクリプトが発生する場所として考えることができます。 ビューは、サーバー(Webページ)によって情報が表示される場所です。 そして、コントローラーが仲介者になります。コントローラーは、クライアントからのHTTPリクエストをルーティングし、モデルを利用して、結果を表示するために必要なビューをロードします。 ものすごく単純。

CodeIgniterではモデルを使用する必要はありませんが、推奨されます。 それらを使用しないと、コントローラーメソッドが大量のコードで乱雑になり、管理がより困難になります。 もちろん、すべてはアプリケーションのサイズによって異なります。

ルーティング

したがって、モデルを使用していくつかのアクションを実行し、ビューを使用していくつかの情報を表示するコントローラーがあります。 しかし、その情報はどのようにしてクライアントから呼び出されるのでしょうか。 言い換えれば、CodeIgniterはどのようにURLを処理しますか?

とてもシンプルです。 前のチュートリアルで説明したURL構成手順に従ったとすると、URLは次の方法で作成されます(その醜い index.php セグメントを削除した後)。

http://www.example.com/[controller-class]/[controller-method]/[arguments]

これは、ベースURL( example.com )の後に、クラス名、メソッド(クラス関数)名、この関数に渡す引数が続くことを意味します。 関数がより多くの引数を取る場合、これらはスラッシュでURLで区切られます。 これはとても素晴らしく、理解しやすい構造です。

さらに、この標準から脱却するための高度なルーティングオプションがいくつかあります。 1つのコントローラーとメソッドのみを使用する前面サイトの単純なアプリケーションがあるとします。 それぞれのControllerメソッドが、ユーザーがブラウザーをベースURLにポイントしたときに呼び出されるデフォルトの関数になるようにすることができます。 さらに、ベースURLの後に渡されるものがこのメソッドの引数を表すルールを作成できます。 これを行うには、 application / config/フォルダーにあるroutes.phpファイルを開いて編集します。

デフォルトのCodeIgniterインストールでは、そのファイルのどこかに次のように表示されます。

$route['default_controller'] = "welcome";

default_controller は、ベースURLの後に何も渡されない場合にデフォルトで呼び出されるコントローラーを設定します。 コントローラの名前を反映するようにこれを変更します。

$route['default_controller'] = "your_controller";

このファイルを保存してベースURLに移動したら、 your_controllerindex()メソッドを呼び出す必要があります。 これは、コントローラーがURLで要求されたが、メソッドが指定されていない場合に呼び出されるデフォルトのメソッドです。 次に、デフォルトで呼び出すメソッドも追加して、もう一度編集します。

$route['default_controller'] = "your_controller/your_method";

ここで、ベースURLに移動すると、your_controlleryour_methodを呼び出します。 ただし、設定したことを実行するには、routers.phpファイルのdefault_controllerを設定した行のすぐ下に別の行を追加する必要があります。

$route['(:any)'] = 'your_controller/your_method/$1';

これにより、ベースURLの後に何かを追加した場合、それはコントローラーとしてではなく、your_controllerにあるyour_methodへの引数と見なされます。 ファイルを保存し、テストして確認します。 URLにコントローラーの名前とメソッドを渡す必要があることを心配する必要はありません。 ベースURLの直後に引数を直接指定できます。 そして、ここにはたくさんのバリエーションがあり、いくつかの複雑なルーティングを作成するために遊んでみることができます。

注:ルーティングルール間の競合について疑問がある場合、CodeIgniterはルールを上から下に読み取り、最初に一致するルートにリクエストを送信します。

ライブラリとヘルパー

CodeIgniterには、アプリケーション開発時の作業を楽にするためのライブラリとヘルパー関数が多数用意されています。 ただし、他の多くのソリューションとは異なり、フレームワーク全体は最初からすべてロードされているわけではないため、非常に軽量なままです。 アプリケーションで必要に応じて、自分でロードします。

たとえば、コントローラーでデータベースライブラリ(またはクラス)を利用するには、次の簡単な行を使用して、必要なメソッドでデータベースライブラリをロードできます。

$this->load->database();

それでも、ライブラリとヘルパーを自動ロードするオプションもあります。 これは、アプリケーションに最初からそれらが含まれるため、さまざまなコントローラーに個別にロードする必要がないことを意味します。

データベースクラスとURLヘルパーは、ライブラリとヘルパーの良い例であり、頻繁に使用するときに自動読み込みに意味があります。 1つ目は、データベースを操作するための非常に強力な Active Record パターンを備えていますが、2つ目は、リンクを出力したり、さまざまなURLをロードしたりするための便利な機能を備えています。

上記を自動ロードするには、 application / config/フォルダーにあるautoload.phpファイルを開き、次の行を見つけます。

$autoload['libraries'] = array();

と置換する:

$autoload['libraries'] = array('database');

配列には、自動ロードする必要のあるライブラリクラスの名前が含まれている必要があります。 各ライブラリは、配列内のアイテムである必要があります。

ヘルパーの場合、同じ方法でこの配列にヘルパー名を追加する必要があります。 これを置き換えます:

$autoload['helper'] = array();

$autoload['helper'] = array('url');

ファイルを保存した後、アプリケーションがロードされると、これらのライブラリとヘルパーはどこでも利用できるようになります。 フレームワークを拡張する場合は、独自のライブラリを定義することもできます。

結論

CodeIgniterは非常に強力なツールであり、その機能を活用するためのさまざまな方法があります。 したがって、すべてを1か所でカバーすることは困難です。 ただし、これらは、開始する前に知っておく必要のある最も重要な概念の一部です。 次のチュートリアルでは、これらすべてを適用して、データベースにクエリを実行し、ブラウザに情報を表示する簡単なアプリケーションを作成する方法の例を示します。

CodeIgniter-Article#1 CodeIgniter-Article#2 CodeIgniter-Article#3 Article投稿者: Danny