Phalcon Devtoolsを使ったMVCプロジェクト作成からHelloWorldまで

2014年7月9日(水)
廣瀬 一海

はじめに

前回記事ではPhalconの開発環境を構成しましたが、今回はこの環境とPhalcon Devtoolsを使って、MVCプロジェクトの作成・MVCプロジェクトの起動・簡単なコントローラーの作成を行い、これらを使ってHelloWorldの出力を行います。

対象となる読者

  • PHPの一般的な知識をお持ちの方
  • CakePHPなど、他のPHPフレームワークを用いた開発の経験をお持ちの方

前提となる環境

  • PHP 5.4以降の環境でPHPをコマンドライン実行可能であること
  • MySQLやMariaDBで事前に接続情報とデーターベースを作成してあること

DevTools WebToolsの準備

前回でも簡単に触れましたが、Phalcon Devtoolsはプロジェクトの雛形やコントローラー・データーベースのテーブルからのモデル生成・スカッフォールド・DB構造のマイグレーションなどを行ってくれる便利なコマンドラインツールです。開発が積極的に進んでいますので、以下に挙げる更新機能を持つ各種ツールを利用することを推奨します。

Phalcon DevtoolsはPHP CLIが動作を前提に開発されています、コマンドラインからphpが実行可能か事前に確認してください。
【参考】Phalcon Devtools

Composerを使ってインストール

composer.jsonを使って、Phalcon Devtoolsをインストールすることができます。Composerは予めインストールしておき、ccomposerコマンドが使えるように、予め環境変数PATHにComposerのインストール先を登録してください。
【参考】Composer

適当なフォルダを作成し、以下の内容のcomposer.jsonを作成します。

1{
2"require": {
3"phalcon/devtools": "dev-master"
4}
5}

composer.jsonを作成したフォルダで以下のコマンドを実行します。

1php composer.phar install

PEARを使ってインストール

PHPのよく使われているPEARを使ってインストールすることもできます。
beta版のconfig-setとチャンネルの登録を忘れずに行ってください。

1pear config-set preferred_state beta
2pear channel-discover pear.phalconphp.com
3pear install phalcon/Devtools

Git cloneでのインストール

分散リポジトリ管理ツールのGitを使ってのインストールも可能です。既にGitをインストールされている方はこの方法が一番楽でしょう。

1cd Devtools展開先のフォルダ
2git clone https://github.com/phalcon/phalcon-devtools.git
3cd phalcon-devtools

いずれのインストール方法の場合でも、phalcon-devtoolsフォルダを環境変数PATHに登録してください。登録後にコマンドラインから実行して、PATHが通っていることを確認してください。

MVCプロジェクトの作成

Phalcon Devtoolsからプロジェクトを作成します。
以下はWindows環境での例です。ここではHelloWorldという名前のプロジェクトを作成しています。

1C:\Users\kazumi\Documents\NetBeansProjects>phalcon create-project HelloWorld --enable-webtools
2 
3Phalcon DevTools (1.3.2 ALPHA 1)
4 Success: Controller "index" was successfully created.
5 
6 Success: Project 'HelloWorld' was successfully created.

開発用Webサーバーの起動と表示の確認

生成したプロジェクトを早速起動してみましょう。
その前にドキュメントルートに設定する環境に合わせて、生成されたプロジェクトのconfig.phpを修正します。

config.phpの変更

HelloWorld/app/config.phpをエディタなどで開き、以下を参考に修正してください。
修正する箇所はdatabaseの接続文字列と、baseUrlの箇所です。

01<?php
02return new \Phalcon\Config(array(
03  'database' => array(
04    'adapter'     => 'Mysql',
05    'host'        => 'localhost',
06    'username'    => 'dbユーザー名',
07    'password'    => 'dbパスワード',
08    'dbname'      => 'db名',
09  ),
10  'application' => array(
11    'controllersDir' => __DIR__ . '/../../app/controllers/',
12    'modelsDir'      => __DIR__ . '/../../app/models/',
13    'viewsDir'       => __DIR__ . '/../../app/views/',
14    'pluginsDir'     => __DIR__ . '/../../app/plugins/',
15    'libraryDir'     => __DIR__ . '/../../app/library/',
16    'cacheDir'       => __DIR__ . '/../../app/cache/',
17    'baseUri'        => '/',
18  )
19));

PHPビルドインサーバー機能での起動

(クリックで拡大)

PHP5.4以後から機能として追加された、「ビルドインWEBサーバー」を用いてプロジェクトを起動します。ファイルHelloworld/public/.htrouter.phpを作成してください。

01Helloworld/public/.htrouter.php
02 
03<?php
04if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
05  list($url, $querys) = explode('?', $_SERVER['REQUEST_URI']);
06  $_GET['_url'] = $url;
07  if ($querys) {
08    $params = explode('&', $querys);
09    foreach ($params as $param) {
10      list($key, $value) = explode('=', $param);
11      $_GET[$key] = $value;
12    }
13  }
14}
15return false;

生成したプロジェクトルートに移動し、以下のコマンドを入力してプロジェクト起動してください。

1C:\Users\kazumi\Documents\NetBeansProjects\HelloWorld>php -S localhost:8000 -t public .htrouter.php
2PHP 5.5.8 Development Server started at Thu Jun 26 07:42:41 2014
3Listening on http://localhost:8000
4Document root is C:\Users\kazumi\Documents\NetBeansProjects\HelloWorld\public
5Press Ctrl-C to quit.

ブラウザを起動して、http://localhost:8000/にアクセスしてください。

(クリックで拡大)

Phalcon WebToolsの確認

Phalcon Devtoolsdを使ったプロジェクト生成の際に コマンドラインオプションとして--enable-webtoolsを指定しましたが、このオプションによりPhacon WebToolsをブラウザから操作が可能になります。
ブラウザを起動して、http://localhost:8000/webtools.phpにアクセスしてください。

(クリックで拡大)

コントローラーの作成

HelloWorldの出力を行うための、コントローラーを生成します。WebTools上のControllersをクリックしてください。

(クリックで拡大)

Create Controllerが表示されたら、NameにController Nameを入力してGenerateボタンを押してください。
「The controller "HelloController.php" was created successfully」と表示されていれば、コントローラーの生成に成功しています。

(クリックで拡大)

Phalconのコントローラー

生成されたコントローラーを確認します。
Helloworld/app/controllers/HelloController.phpを編集します。

  • \Phalcon\Mvc\Controllerクラスを継承している。
  • クラス名はHelloController
  • メソッドにはActionというsuffixが付与されている

Ruby on RailsやCake PHPなどの経験がある方は、すぐに理解できると思いますが、Phalconでも命名規則があります。
コントローラーのクラスは、いくつかのActionというメソッドで構成されており、実際にリクエストのハンドリングを行います。

例として、下のURLにアクセスした場合
http://localhost/posts/show/2012/the-post-title

Phalconのデフォルトでは、以下の表として解釈されます。

URIの階層
コントローラー posts
アクション show
引数1 2012
引数2 the-post-title
01<?php
02 
03class PostsController extends \Phalcon\Mvc\Controller
04{
05 
06  public function indexAction()
07  {
08  
09  }
10  
11  public function showAction($year, $postTitle)
12  {
13 }
14}

Phalconのコントローラーは、以下のルールを守る必要があります。

  • クラス名にはControllerとSuffixを付与 (HelloならHelloController)
  • メソッド名にはActionとSuffixを付与、メソッドのアクセス権限はpublic ()
  • コントローラー名のみのアクセスケースのために、indexActionがデフォルト
  • \Phalcon\Mvc\Controllerクラスを継承
  • app/controllers配下にクラス名.phpのファイル名で配置(HelloならHelloController.php)

indexAction()メソッドの中にecho "Hello World";として、HelloWorldを出力するコードを記述してください。

01<?php
02 
03class HelloController extends \Phalcon\Mvc\Controller
04{
05 
06  public function indexAction()
07  {
08    echo "Hello! World!";
09  }
10 
11}

コントローラーの表示

ブラウザを起動して、http://localhost:8000/helloにアクセスしてください。また、http://localhost:8000/hello/indexにもアクセスしてください。

(クリックで拡大)
アイレット株式会社 cloudpack事業部 シニアソリューションアーキテクト

生業はインフラエンジニア。小規模から大規模なまで日々様々なインフラを構成しています。好きなクラウドはMicrosoft Azure、日頃の業務はAmazon Web Services、という感じにクラウド漬けの毎日を過ごしています。​
仕事の傍ら、勉強会やコミュニティ(日本Azureユーザー会)コアメンバとして活動しています、マイクロソフトのオープンソース戦略にとても共感し、Microsoft MVPとして情報発信や交流を行っています。
Microsoft MVP Microsoft Azure

cloudpack公式サイト:http://cloudpack.jp

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています