Curry
PHP Framework

カスタマイズ

規定のディレクトリ構成を変更する

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ではクラス名やメソッド名、ファイル名など、あらゆる命名対象の命名規則を以下の三つのどれかに当てはめています。

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