WEB/システム/IT技術ブログ

CakePHPではコンポーネントという概念があります。
簡単に説明すると複数のコントローラで同じ処理を共有したい場合に、コンポーネントとして切り出して再利用するわけです。クラス、パッケージ化みたいなものでしょうか。

例えばコンポーネント「test」を作成したい場合、まずは新規ファイル「/app/controllers/components/test.php」を作成します。そのファイルの中身を以下のように実装したとします。

class TestComponent extends Object{

	var $controller = null;
	var $settings = array();

	function initialize(&$controller, $settings){
		$this->controller = $controller;
		$this->settings = $settings;
	}
	function show(){
		echo $this->settings['test1'] . "<br />";
		echo $this->settings['test2'];
	}
}

initializeはクラスでいうコンストラクトのようなもので、コンポーネントが呼ばれた際に、初めに実行される処理です。

CakePHPでコントローラとビューについては把握しました。しかし、いざトップページのコントローラを設定するとなるとうまくいきません。

Zend Frameworkの例と、CakePHPのルールから推測するには「/app/controllers/index_controller.php」を設置すればよいはずですよね。しかし、うまくいきません。

少し調べたところ、トップページだけは例外のようです。
その設定が記述されているのは「/app/config/routes.php」のです。

/**
 * Here, we are connecting '/' (base path) to controller called 'Pages',
 * its action called 'display', and we pass a param to select the view file
 * to use (in this case, /app/views/pages/home.ctp)...
 */
	Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
 * ...and connect the rest of 'Pages' controller's urls.
 */
	Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

PHPのフレームワークCakePHPの基盤を使って「Hello World!」を表示させてみます。

CakePHPもZend Frameworkと同様にMVCを採用しており、mod_rewriteを利用してindex.phpをフロントコントローラとしています。詳細は同blogのZend Framework関連の記事を参照してください。
Zend Framework | cms helog – CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

まず「/test/hello」にアクセスするため、「test」コントローラにアクションメソッド「hello」を用意します。
ファイル「/app/controllers/test_controller.php」を作成して、以下の内容を記述します。ファイル名はコントローラ名の後に「_controller.php」を足すのがルールです。

class TestController extends AppController {

	public $name = "Test";
	public $uses = null;
	public $autoRender = true;

	function index(){
	}

	function hello(){
		$this->set("content", "Hello World!");
	}
}

今回はCakePHPをインストールします。

PHPのフレームワークが本格的に取り上げられるようになってきて間もないですが、近年では、安定したフレームワークが出てきているようで、PHP開発者として一つは習得しなければいけないと考えました。前回までにZend Frameworkの記事をいくつか書きましたが、Zend Frameworkについて調べていると、やたら「CakePHP」というキーワードが目に映ります。

Zend Frameworkの概要はつかめてきたのですが、本格的な開発に入る前に、CakePHPも学んでみて、どちらが私にとって有用かを比較してみたいと思いました。

CakePHPはRuby on Railsの概念に沿って作り上げられた経緯があり、その導入コストはかなり低いものになっているようです。また、PHP4でもPHP5でも動作し環境依存が小さいので、どのレンタルサーバにも比較的インストールし易いといった特徴があります。その容易さとは反面、機能は多彩で、初心者から上級者まで安定して使用できるフレームワークのようです。

前回、Zend FrameworkにテンプレートエンジンSmartyを組み込む方法を紹介しました。
Zend FrameworkとSmartyを連携させる(1)
今回はその環境での動作確認です。

まずはフレームワーク上でSmartyが動作しているかの確認です。
「/application/controllers/TestController.php」に以下を実装します。

require_once 'Zend/Controller/Action.php';

class TestController extends Zend_Controller_Action{

	public function indexAction(){
	}

	public function helloAction(){
		$this->view->word = 'Hello World!';
	}

}

次にテンプレート「/application/smarty/templates/test/hello.html」を用意します。

{$word}

これで、テスト環境「http://(てすと環境)/test/hello」にブラウザでアクセスすると

Hello World!

と表示されます。
つまりはSmartyのテンプレートが機能している間は、Zend Frameworkのビューワー「/application/views/scripts」は不要になるんですね。

今回はZend Frameworkのフレームワーク機能の中に、Smartyのテンプレートエンジンを組み込みます。

Zend FrameworkではMVCモデルを採用していますが、Viewの部分はあくまで見栄えを切り離しただけで、Smartyのようなテンプレート機能は備えていません。そこで、Zend Frameworkの公式マニュアルでも紹介されえているSmartyラッパーを実装してみます。
Zend Framework: Documentation: ビュースクリプト – Zend Framework Manual

まずはそれぞれのバージョンは以下のとおりです。

Apache 2.2.12
PHP 5.3.0
Zend Framework 1.11.1
Smarty 2.6.26

今回はZend Frameworkのベースとなる仕組みを理解してみたいと思います。
まずは定番の「Hello World!」を表示させてみます。

前回、「Zend Frameworkをインストール」でも記述したように、「.htaccess」にmod_rewriteを記述して、全てのアクセスをindex.phpにリダイレクトするようにします。
その理由として、Zend FrameworkはMVCを採用しており、Cの部分に該当するコントローラというしくみで全てのリクエストが処理されます。フロントコントローラがindex.phpにあたります。

ソフトバンクのAndroid端末、HTC DesireでWi-Fi接続時にメールの送受信ができなくなってしまいました。

以前は、自宅でWi-Fi接続中でもMMSを送受信できていたはずなのに。Android OSのアップデートや、ソフトバンクメールのアプリのアップデートもあったので、そのタイミングで使えなくなったのでしょうか。はっきりとした原因は不明です。

Wi-Fi接続時でも着信はできるので、メールの送受信も同じくできそうなものですけどね。通話もメールも3G回線じゃなかったんでしたっけ?
いや、それ以前に購入時には送受信できないなんてことはありませんでした。

対策はないものかとWebを探していたところ、こんな情報を見つけました。
[Wi-Fi]Wi-Fiを利用してSMS、S!メールは送受信できますか?

回答を一部抜粋すると
「Wi-Fi接続が有効になっていると正しく送受信できない場合があります。いったんWi-Fi接続をオフにしてお試しください。 」

「できない場合」?それでは、できる場合もあるということ?その違いが重要でしょう。そこ教えてください。

とりあえず、現状は、「メールの受信に失敗しました」というアラートでメールが来たことに気づきます。その後、Wi-Fiをオフにして再度受信ボタンを押します。
何かめんどくさいですね。

スマートフォンを持ってしばらく経ちます。まだ物珍しさはあるので、飲み会の場なのでネタにされたりします。
「それiPhone?」から始まることが多いですが。。。

私の持っているのはSoftbankのX06HTⅡ「HTC Desire」です。やはり、他のキャリアや機種に比べて、大々的なCMはやっていないので、認知度はかなり低いようです。スペック的にも優秀だし、他のスマートフォンに比べても使いやすいほうだと思うのですが、なぜでしょう?

よく聞かれるのは「携帯高かったでしょ?」という質問です。携帯電話の値段なんて一般的には出回らないし、私自身、機種変更はほとんどしないので、はっきりとは言えませんが、安いほうだと思います。

たまたま、X06HTⅡの後継機にあたる「HTC Desire HD」の価格が紹介されているページも見つけたので、ついでに比較してみました。

HTC Desire HD、販売価格は83,520円。パケットし放題MAX加入時、24回払いでの実質負担は1,280円/月

フルFlashとDBサーバとを連携させた動的コンテンツを構築したときの話です。
カタカナの「グ」の濁点がずれて表示されるとの連絡を受けました。確かにFlash画面を見てみるとカタカナの濁点がズレて表示されています。

そんなことが起こりうるだろうかと、私のほうでシステム管理画面から「グ」を入力したところ、濁点がずれることもなく、Flash側では問題なく表示されていました。

その旨を相手に伝えたのですが、またしばらくすると、どうしてもカタカナの濁点がずれて表示されるということ。

Monthly Archives