第11回 Smartyとフレームワーク(その1:CakePHP編) - Smarty講座

yossy先生のSmarty講座

Lecutures on PHP

第11回 Smartyとフレームワーク(その1:CakePHP編) (その1)

 このエントリーをはてなブックマークに追加

yossy先生



今までの連載では、Smarty自身が持っている機能についての説明がほとんどでした。
しかし今回はちょっと趣向を変えて、Smartyを他のフレームワークと組み合わせて使うための方法について説明したいと思います。

フレームワークとは

その前に、フレームワークについて簡単に説明したいと思います。

フレームワークとは、プログラムを書く際によく使われる機能や構造をあらかじめまとめておいて提供し、それを土台として開発を進めるためのプログラム群の事です。

これにより、いつも同じようなロジックをコーディングする必要がなくなり、またフレームワークのルールに沿って作ることによって、誰が書いてもコードの品質を均一に保つことができるという利点があります。

よく知られているWebアプリケーションのフレームワークでは、Ruby on RailsやJavaのStrutsなどがあります。

またフレームワークはWebだけでなく、様々なアプリケーションやシステムでも用いられている仕組みです。
たとえばWindows上で動作するアプリケーションを作成するときは、マイクロソフト社が提供しているMFCや.NET Frameworkといったフレームワークを用います。

そしてPHP用のフレームワークも非常に多彩で、有名どころではsymfony、CakePHP、Zend Frameworkなどがあり、また他にも様々なフレームワークがあちこちで作られています。

PHPのフレームワークの解説は、PHPプロの特集でもまとめられてますので、ぜひ一度目を通してみてください。

PHPフレームワーク特集ページ:http://www.phppro.jp/article/framework/framework.php

Webフレームワークで必要なもの

yossy先生さて、Webフレームワークに必要なものとは何でしょう?

第1回でMVCモデルの話をしました。ユーザーからパラメータを受けるコントローラ、データベースなどビジネスロジックを扱うモデル、HTMLなどのUIを扱うビューの3つに役割を分担し、構築するアーキテクチャということを説明しましたが覚えてますでしょうか?

ほとんどのWebフレームワークではこのアーキテクチャに従った作りになっています。

しかしそれだけでは、Webアプリケーションを作るための基礎としては不十分です。

Webアプリケーションを作成するためには、XSSやCSRFなどのセキュリティホールに対する対策のことも気にする必要があります。また各ページのURLもREST風にわかりやすくしておく必要もあります。
さらに、ユーザー管理やアクセス権の制限も必要になってくる場合もありますし、HTMLを記述するためのテンプレート管理も必要になってくるでしょう。

このあたりを実現するために必要な仕組みやライブラリが一式そろって提供されているのが昨今のWebフレームワークです。

開発者は、どのWebアプリケーションでも共通で必要となる部分に開発の時間を割く必要がなくなります。その分、アプリケーションの目的に特化したビジネスロジックの開発に専念することができるような作りになっており、効率的で高速な開発が出来るようになったのです。

フレームワークとSmarty

というわけで、昨今のPHP界隈ではフレームワークを用いた開発手法が主流となっているようです。

ではそのような状況で、テンプレートエンジンであるSmartyの立ち位置はどうなっているでしょうか?

昨今のPHPフレームワークの多くは、ビューにテンプレートエンジンを用いずPHPのコードをそのまま記述する仕組みになっているようです。

ただ、なるべく効率よく、かつわかりやすく記述ができるよう、「ヘルパー」と呼ばれる仕組みが用意されています。

コントローラから受け取ったパラメータの表示や、XSS防止のためのエスケープ処理など、必要最小限のPHPコードで大抵の事が実現できるよう環境が整えられています。

……正直、Smartyなどのテンプレートエンジンを使わなくてもビュー開発のための十分な環境は揃っているようです。

ただ、それでもSmartyをフレームワーク上でも使いたいという強いニーズはあるようで、それを実現するためのプラグインや、スニペットと呼ばれる仕組みが有志によって作られています。

  



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)