2018年1月10日TwitterSharePocketHatenaLINEコピーするABC(*1)の10日目。共通テーマは私が開発している「Risouto」についてです。サンプルコードの中身を見てみよう前回はサンプルコードにWebブラウザからアクセスし、URLの指定方法や値をアプリケーションに受け渡す方法について見てみた。今回はそれを実現するコードを見てみることにしよう。なにがしかの方法で「/path/to/risoluto/apps/RisolutoApps/Sample」ディレクトリに移動して欲しい。その中にサンプルコードのファイルが保存されているはずだ。今回はSample2.phpとSample2.tplの2ファイルにだけ気にすれば良い。共通のルールさて、まずはRisolutoの世界におけるルールについて、いくつか解説しておく必要があるだろう。ルールその1:アプリケーションは「/path/to/risoluto/apps/RisolutoApps/」ディレクトリ配下に格納する「/path/to/risoluto/apps/RisolutoApps/」ディレクトリが貴方が意識する必要のある一番重要なディレクトリだ。この中に貴方が作成したアプリケーションのファイルを格納する。必要であればサブディレクトリを作成(*2)し、その中にアプリケーションのファイルを格納してもいい。ルールその2:「/path/to/risoluto/apps/RisolutoApps/」ディレクトリ配下のサブディレクトリやファイル名の先頭は大文字でこのディレクトリ内に格納する全てのファイルおよびディレクトリ名は、例外なく先頭1文字を英大文字にすること。これは統一ルールとして設けてある。必要であれば、PSR-0に準拠している限りにおいて、このルールを破る事ができる。ルールその3:テンプレートは「.tpl」、プログラムは「.php」という拡張子にする拡張子としてHTMLを切り出したテンプレートに関するものは「.tpl」という拡張子にすること。それ以外のPHPコードが含まれる部分については「.php」という拡張子にすることがルールだ。前者がMVCで言うところの「V」に当たり、後者が「M」または「C」に当たるものだ。ファイル名についてはテンプレートとプログラム(コントローラ側)双方で同一にしておくことが望ましい。.tpl:テンプレートファイルを紐解くそれでは簡単な方というわけで、「Sample2.tpl」の中身を覗いてみることにしよう。ここにそのコードを全て列挙することはしないので、各自コードを見て欲しい。いうわけで、ここでRisolutoにおけるテンプレートファイルに関するルールを説明しておこう。ルールその4:Smarty3を使っているデフォルトでは、RisolutoはテンプレートエンジンとしてSmarty3を使用している。テンプレートを書くときは、そのルールに従う必要がある。必要であれば他のテンプレートエンジンを組み込んで使うこともできるが、配布パッケージ中の各ファイルはSmarty以外では動作しないだろう。ルールその5:ヘッダやフッタ等の共通ファイルは「/path/to/risoluto/apps/RisolutoApps/common」に配置ヘッダやフッタ等のある種共通で参照されるテンプレートについては、「/path/to/risoluto/apps/RisolutoApps/common」配下に格納されている。このルールを厳密に守る必要は無いが、特にこだわりが無いならしたがっておいた方が良いだろう。ルールその6:「/path/to/risoluto/apps/RisolutoApps/」へのパスはデフォルトでアサインされているよく参照するであろう「/path/to/risoluto/apps/RisolutoApps/」ディレクトリのパスであるが、これはデフォルトでテンプレート側で参照できる。「$__RISOLUTO_APPS」というSmarty変数がそれだ。サンプルコードでは、ヘッダやフッタをインクルードする際に、それらの格納パスを指定する目的で使用している。いうわけで、基本的には小難しいことは何も無い。Smarty3が使えてHTMLの知識があれば、それをフル活用すれば良いだけである。.php:プログラムファイルを紐解く続いて「Sample2.php」の中身を覗いてみることにしよう。こちらについても、ここにそのコードを全て列挙することはしないので、各自コードを見て欲しい。いうわけで、Risolutoにおけるプログラムファイルのルールを説明しよう。貴方が作ったアプリケーションを「/path/to/risoluto/apps/RisolutoApps/」ディレクトリに配置したなら、「RisolutoApps」という名前空間に属するようにしなければならない。サンプルコードのようにサブディレクトリに配置したなら、名前空間は「RisolutoAppsPathToDir」のように指定する。ルールその8:requireでなくUse例えばSmartyのような外部のクラスライブラリを参照したいときは、requireやincludeを使うのではなく「Use」を使って指定する。Risolutoではcomposerをつかっているので、そのクラスローダが適切に必要な処理を行ってくれる。コントローラの場合は「RisolutoRisolutoControllerBase」クラスを継承するコントローラ向けに「RisolutoRisolutoControllerBase」というクラスが用意されている。これを継承しておくことで、Risoutoを使う上での手間のほとんどを解消してくれる。モデル向けに同様のクラスが一応用意されている(*3)。ルールその9:コードはPlay()に必要なコードはすべて「Play()」というメソッドに記述する。正確に言えばちょっと違うのだが、最初のうちはそう解釈しておくと良い。ルールその10:デフォルトのヘッダ情報を取得する方法$this->GetDefaultHeader()というメソッドをコールすると、デフォルトのヘッダ情報を連想配列の形式で得ることができる。どのような情報がセットされるのかについては、この連想配列の中身をチェックしてみて欲しい。デフォルトから変更したいものがあれば、この連想配列の値を書き換えればよい。どのような連想配列を生成しなければいけないのかを理解しているなら、自分でそれを1からつくってもよい。ルールその11:テンプレートの準備は3段階テンプレートを準備するためのメソッドは3つあり、それらを順番に適切にコールする必要がある。「InitTemplate()」というメソッド。文字通りテンプレートエンジンの初期化等を担当するメソッドだ。引数としてテンプレートファイルの格納パスを指定する。この格納パスには、RISOLUTO_APPS以下のディレクトリを指定する。RISOLUTO_APPS直下にテンプレートファイルが格納されているなら、引数無しでコールすればよい。メソッドの戻り値として、テンプレートエンジンのオブジェクトが返却される。2つめは「AssignTemplate()」というメソッド。テンプレートへ値をアサインするためのメソッドだ。前述の「$__RISOLUTO_APPS」というテンプレート変数は、このメソッドでアサインされる。第1引数はテンプレートエンジンのオブジェクト、第2引数はアサインする値を連想配列形式で指定する。最後が「DispTemplate()」というメソッド。テンプレートを表示するためのメソッドだ。これをコールすることでWebブラウザ側に処理されたHTMLが出力される。第1引数はテンプレートエンジンのオブジェクト、第2引数はテンプレートファイルのファイル名を指定する。ルールその12:Risoluto方式で渡されたパラメタはGetParam()メソッドで得るRisoluto方式で渡されたパラメタ、すなわち「?seq=Foo.param1」のように指定された場合のパラメタを受け取るには、「GetParam()」というメソッドを使用する。)」の用に取得することができる。文字にすると煩雑に見えるけれど......さて、ここまでが代替覚えておくべきルールとなる。文字にするととても煩雑に見えるかもしれないが、実際にアプリケーションを作成する際は、さほど気にならないと思う。ほとんどの場合、Risoluto固有の部分については「サンプルと同じように書く」ことでニーズを満たせるはずだ。凝ったことをしたいなら、Risolutoのコードを読んでみると良いだろう。いうわけでRisolutoのコードを深く読んでいきたいと思うわけだが、それについてはまた来週。HayakawaハムスターLOVEな自称PHP&GNU/Linux系エンジニア。余裕のあるときならコラボ等歓迎(ただしボクは低レベル)。各オンラインストアで自作曲販売中。転職してからいろいろと忙しい日々を送っているボクです。〜」をご参照ください。Risoluto@アドベント・ぼっち・カレンダー:9日目ABC(*1)の9日目。共通テーマは私が開発している「Risouto」についてです。Risoluto@アドベント・ぼっち・カレンダー:15日目ABC(*1)の15日目。共通テーマは私が開発している「Risouto」についてです。いや、ずっと気になっていたんですよ。操作説明なんかをアニメーションGIFで作った動画(?)でやってるサイトがあるじゃないですか。〜事前検討編〜なんか無線LANのアクセスポイントを買い換えたいなと思ったのです。