コントローラー
シングルページを作成し、単にそのファイル内のコンテンツを表示する以上の何かをしたい場合は、コントローラーを作成します。コントローラーはシングルページのビューテンプレートの裏で動いているもう一つのPHPファイルです。コントローラーは、ページのテンプレートからそれぞれの異なるアクションで渡されたデータを処理することができます。コントローラーは、コードを処理と表示に分離することができ、プロジェクトのメンテナンス性を高めることができます。
コントローラーを作成
下記のシングルページを作成済みの場合で、
application/single_pages/media/view.php
管理画面からすでにシングルページを追加している場合、次のURLで表示されます。
http://www.yoursite.com/index.php/media/
このシングルページに対応したコントローラーを作成するには application/controllers/single_page/media.php
ファイルを作成します。次にファイルを開き、次のコードを入力してみましょう。
<?php namespace Application\Controller\SinglePage; use Concrete\Core\Page\Controller\PageController; class Media extends PageController { }
ルートの application/ ディレクトリ内のシングルページコントローラーの名前空間は、Application\Controller\SinglePage
で始まり、ページ名の直前までのURLセグメントをキャメルケースにしたものが続きます。クラス名は最後のURLセグメントをキャメルケースにしたもので、 Concrete\Core\Page\Controller\PageController
クラスを継承します。
管理画面のページコントローラーを追加する場合
管理画面内のページを追加する場合で、ページが /index.php/dashboard/ticketing/order
にある場合、コントローラーのファイルは application/controllers/single_page/dashboard/ticketing/order.php
に設置し、次のようなクラス定義になります。
<?php namespace Application\Controller\SinglePage\Dashboard\Ticketing; use Concrete\Core\Page\Controller\DashboardPageController; class Order extends DashboardPageController { }
注意:DashboardPageController を継承しています。このコントローラーは、管理画面のテーマの機能を使うためです。
URLルーティングとシングルページコントローラー
URLとメソッドの対応
シングルページの空のコントローラーを追加しただけでは、このコントローラーは何の動作もしませんので、メソッドを追加します。メソッドはシングルページのURLと対応します。例えば、media ページの場合、
http://www.yoursite.com/media/
このページにアクセスした際にカスタムコードを実行したい場合は、コントローラーに次のメソッドを追加します。
public function view()
{
}
view()
メソッドはシングルページにアクセスすると自動的に実行されます(存在する場合)。しかしより興味深いことがあります。シングルページのURLに追加するとどうでしょうか。
http://www.yoursite.com/media/add
http://www.yoursite.com/media/list
http://www.yoursite.com/media/album_updated
これらのURLは自動的にコントローラーの add()
, list()
, album_updated()
メソッドを呼び出します。
メソッドパラメーター
次のようなURLの場合
http://www.yoursite.com/media/list/15
自動的にコントローラーの list()
メソッドが実行されますが、list()
メソッドはURLセグメントの次の値を引数として受け取り、デフォルト値を指定することができます。
public function list($albumID = null)
{
}
もしこのように指定しなければ、このURLにアクセスしたり list の後にパラメーターをつけてアクセスしたリアしても、404エラーになります。
複数のパラメーターを取ることも簡単です。検索用のシングルページを /search
に追加して、次のように年と月で絞り込みたい場合
http://www.yoursite.com/search/2015/02/
次のメソッドをコントローラーに追加すれば可能です。
public function view($year = null, $month = null)
{
}
/search
の次の2つのURLセグメントは、メソッドの $year
と $month
に対応しています。
その他のメソッド
on_start()
コントローラーに存在する場合、どのURLセグメントの場合でも必ず実行されます。
on_before_render()
コントローラーに存在する場合、on_before_render()
はどのURLベースのメソッドが実行される場合でも実行されますが、ページのレンダリングが始まる直前で実行されます。
注意:もし on_start()
や on_before_render()
を管理画面内のページコントローラーで定義する場合は、親メソッドを parent::on_start()
や parent::on_before_render()
で呼び出すようにしてください。
concrete5のコントローラーは、オートロードやbootstrapプロセスから分離された通常のPHPコードです。ページテンプレートで実行可能なコードは全てコントローラーで実行可能です。これは、コードをコンテンツから分離するのに役立ちます。このことは、コントローラーからページビューにデータを送る機能によって実現可能になります。詳細は、次のページをお読みください。
原文:Controllers