カスタマイズ
規定のディレクトリ構成を変更する
Curryではコントローラーやモデル、ビューその他のディレクトリ構成は、あらかじめ規定されているため、それに従うだけで迷うことなくWebアプリケーションを構築できるようになっています。しかし、場合によってはこれを変更したい、または変更しなければならないという場合もあるでしょう。そこでCurryではあらゆるディレクトリのパスを個別に設定できるようになっています。
PathManagerクラス
Curryで規定されるディレクトリ構成はPathManagerクラスによって管理されています。そしてこのクラスにはあらゆるパスを設定するメソッドが用意されています。
| ディレクトリ | 規定 | 設定メソッド |
|---|---|---|
| サイトルート | PathManager::setSystemRoot(静的メソッド) | |
| アプリケーション | サイトルート/app | PathManager::setAppDirectory(静的メソッド) |
| コントローラー | サイトルート/app/controllers | PathManager::setControllerDirectory(静的メソッド) |
| モデル | サイトルート/app/models | PathManager::setModelDirectory(静的メソッド) |
| ビュー | サイトルート/app/views | PathManager::setViewDirectory(静的メソッド) |
| サービス | サイトルート/app/services | PathManager::setServiceDirectory(静的メソッド) |
| ライブラリ | サイトルート/library | PathManager::setLibraryDirectory(静的メソッド) |
| ドキュメントルート | サイトルート/htdocs | PathManager::setHtdocsDirectory(静的メソッド) |
| 設定ファイル | サイトルート/configs | PathManager::setConfigDirectory(静的メソッド) |
| ログ出力 | サイトルート/logs | PathManager::setLogDirectory(静的メソッド) |
メソッドは全て静的メソッドです。
この中でsetSystemRootはサイトのルートディレクトリを設定するメソッドで、index.phpで必ず実行する必要があります。これを行わないとフレームワークが動作しません。
その他のディレクトリはsetSystemRootメソッドの実行時に自動的に設定されます。
その上で、各ディレクトリのパスを変更したい場合は、例えば以下のようにします。
PathManager::setControllerDirectory('/var/www/public_html/site/controllers');
命名規則を変更する
Curryではクラス名やメソッド名、ファイル名など、あらゆる命名対象の命名規則を以下の三つのどれかに当てはめています。
- パスカルケース - 先頭文字が大文字で単語の区切りの先頭も大文字(例:IndexController)
- キャメルケース - 先頭文字が小文字で単語の区切りの先頭は大文字(例:indexController)
- スネークケース - 全て小文字で単語の区切りに"_"を挟む(例:index_controller)
NameManager
Curryは規定の命名規則にしたがって全ての定義を行って初めて正しく動作しますが、命名規則等を管理しているのがNameManagerクラスです。このクラスを利用することにより、規定の命名規則を変更することが可能です。
NameManagerのメソッドは全て静的メソッドです。
| 事象 | 規定 | 設定メソッド |
|---|---|---|
| クラス名 | NameCase::PASCAL | NameManager::setClassCase(静的メソッド) |
| メソッド名 | NameCase::CAMEL | NameManager::setMethodCase(静的メソッド) |
| ファイル名 | NameCase::SNAKE | NameManager::setFileCase(静的メソッド) |
| DBテーブル名 | NameCase::SNAKE | NameManager::setTableCase(静的メソッド) |
設定メソッドの引数にはNameCaseクラスのクラス定数を指定します。例えばクラス名をスネークケースに変更したい場合は以下のようにします。
NameManager::setClassCase(NameCase::SNAKE);
またNameManagerクラスでは、コントローラークラス名の接尾語とアクションメソッドの接尾語を設定することができます。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| コントローラークラス名接尾語 | Controller | NameManager::setControllerSuffix | [dispatch]controller_suffix |
| アクションメソッド名接尾語 | なし | NameManager::setActionSuffix | [dispatch]action_suffix |
また、phpファイルの拡張子の規定を変更することも出来ます。
| 事象 | 規定 | 設定メソッド |
|---|---|---|
| PHPファイル拡張子 | php | NameManager::setPhpExtension |
ビュー関連の設定
テンプレート拡張子
ビューテンプレートの拡張子を変更することができます。
| 事象 | ViewStandard の規定 | ViewSmarty の規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|---|
| テンプレート拡張子 | php | tpl | NameManager::setTemplateExtension | [view]template_extension |
レイアウトの利用
ビューレイアウトは標準で利用できる状態になっていますが、利用したくない場合はOFFにすることも出来ます。
設定はtrueまたはfalseで指定します。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| レイアウトの利用 | true(1) | ViewAbstract::setDefaultLayoutEnabled(静的メソッド) | [view]layout_enabled |
Smartyのコンパイル・キャッシュ出力先
ViewにSmartyを利用する場合、Smartyのコンパイル済みテンプレート出力ディレクトリと、テンプレートキャッシュを出力するディレクトリが必要になりますが、ViewSmartyクラスにはこれらの出力先ディレクトリを設定するメソッドがあります。
| ディレクトリ | 規定 | 設定メソッド |
|---|---|---|
| コンパイル出力先 | サイトルート/views/compile | ViewSmarty->setCompileDirectory |
| キャッシュ出力先 | サイトルート/views/cache | ViewSmarty->setCacheDirectory |
ビュークラス(標準 OR Smarty)
ビュークラスはphpファイルを利用した標準のViewSmartyクラスとSmarty連携用のViewSmartyがあります。これを指定する事ができます。
| 事象 | 規定 | 設定メソッド |
|---|---|---|
| ビュークラス | ViewStandard | Dispatcher->setViewClass(インスタンスメソッド) |
ディスパッチ関連設定
デフォルトのコントローラー・アクションの設定
コントローラーやアクションが未指定のURLの場合、デフォルトは"index"になりますが、このデフォルトのコントローラーやアクションを任意に指定することが可能です。
通常はcurry.iniで設定しますが、Initializer->initialize内でRouterのメソッドを直接実行することでも指定可能です。
| 事象 | 既定値 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| デフォルトコントローラー | index | Router->setDefaultController | [dispatch]default_controller |
| デフォルトアクション | index | Router->setDefaultAction | [dispatch]default_action |
URLアクセスモード
apacheのmod_rewriteを利用したアクセスなのか否かを設定できます。
詳しくはURLの章を参照してください
通常はcurry.iniで設定しますが、Initializer->initialize内でRouterのメソッドを直接実行することでも指定可能です。
| 事象 | 規定値 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| URLアクセスモード | true(1) | Router->isRewrite | [dispatch]is_rewrite |
コントローラーサブディレクトリの利用可否
コントローラーディレクトリにはサブディレクトリを配置してコントローラーを階層化することが出来ますが、これの可否を設定することができます。使用しない方が、わずかですがパフォーマンス的に有利になります。
通常はcurry.iniで設定しますが、Initializer->initialize内でRouterのメソッドを直接実行することでも指定可能です。
| 事象 | 規定値 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| コントローラーサブディレクトリ可否 | true(1) | Router->enableSubController | [dispatch]sub_controller_enabled |
プラグインの利用可否
全てのコントローラーに対して共通処理を付加することが出来るプラグインという仕組みが存在しますが、この利用の可否を設定することが出来ます。使用しない場合、わずかにパフォーマンス的に有利になります。
プラグインの詳細についてはコントローラーの章を参照してください。
| 事象 | 規定値 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| プラグイン可否 | true(1) | Dispatcher->enablePlugin | [dispatch]plugin_enabled |
mod_rewriteを使用しない場合のクエリキー
mod_rewriteを使用しない場合、コントローラーとアクションをクエリ文字列で指定する必要がありますが、このコントローラーとアクションのクエリキーを指定することが出来ます。
通常はcurry.iniで設定しますが、Initializer->initialize内でRouterのメソッドを直接実行することでも指定可能です。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| コントローラークエリキー | c | Router->setControllerQueryKey | [dispatch]controller_query_key |
| アクションクエリキー | a | Router->setActionQueryKey | [dispatch]action_query_key |
ルーティング失敗時のレスポンスステータス
URLからコントローラーへのルーィング失敗時、つまりサイト上に存在しないURLがリクエストされた場合、HTTPレスポンスのステータスコードとして404を返すのが標準になっていますが、これを通常通り200を返すようにしたい場合もあるかもしれません。
この設定により、404を返すか否かを指定できます。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| ルーティング失敗時の404送信設定 | true(1) | Dispatcher->isSend404 | [dispatch]is_send_404 |
データアクセス関連
SQL発行履歴出力設定
DbクラスやModelクラスを利用してSQLを実行した場合、そのSQL文をログに記録する事が可能です。この機能はLoggerクラスを利用して出力を行うため、事前にLogger::setLogNameメソッドで出力先ファイル名を指定しておく必要があります。
その上で、Db::enableLoggingメソッドを引数なしで実行した場合はLogger::setLogNameの第2引数無しで指定したファイルへSQL出力を行います。
Logger::setLogNameで第2引数に任意のキーを指定した場合は、それと同じキーをDb::enableLoggingの引数で指定することで、対応するファイルへ出力します。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| SQLのログ出力 | false(0) | Db::enableLogging | [db]log_key |
シングルトンコネクション
Dbクラスのfactoryメソッドで得られるpdoインスタンスは、factoryメソッドの実行都度、新たなインスタンスを生成するため、次々にDBへのコネクションを複数確立することになります。それを避けたい場合、Dbクラスをシングルトンクラス扱いとし、factoryメソッドで得られるpdoインスタンスが常に同一インスタンスとなるようにすることが可能です。
指定は、trueかfalse(curry.iniでは1か0)で行います。
| 事象 | 規定 | 設定メソッド | curry.iniの[セクション]キー |
|---|---|---|---|
| シングルトンコネクション | false(0) | Db::setIsSingleton | [db]is_singleton |
データベース接続
Modelクラスで利用するデータベース接続インスタンスをあらかじめ生成しておき、Modelクラスに指定することができます。
この指定を行うと、Modelクラスでは基本的にデータベース接続は指定された物を使用するようになるので、常に一つの接続インスタンスを使いまわすことができるようになります。
| 事象 | 規定 | 設定メソッド |
|---|---|---|
| シングルトンコネクション | なし | Model::setDefaultConnection |
空想モデルクラスの利用可否
モデルクラスは基本的にModelを継承し、テーブルとの関連性を持たせた命名規則に従ったクラス名のクラスを作り、モデルディレクトリに格納することが前提になっています。
しかしコントローラーやサービスのmodelメソッドなどでモデルのインスタンスを得る場合、
Modelクラスを継承したクラスが存在しなくても、モデルインスタンスが得られる仕組になっています。
この機能を有効とするか否かを設定することができます。
| 事象 | 規定 | 設定メソッド |
|---|---|---|
| 空想モデルクラスの利用可否 | true | Model::isAllowVirtual |