「Phalcon」は、多くの企業から支持される人気Webフレームワークです。

初めて使うとなると、使い方が分からず困ってしまうこともあるでしょう。

ここではPhalconの便利な機能や使用するメリット、そして基本的なチュートリアルを解説しています。

使う前に、インストール方法と基本事項を確認しておきましょう。


Phalconとは

Phalconとは、Model-View-Controller(MVC)パターンに基づいた、PHPのフルスタックWebフレームワークです。

BSDライセンスを使用しており、商用利用することができます。


Phalconのメリット


高速である

PhalconはC言語で実装されており、高速な動作が可能です。

このことにより、遅いイメージを持たれがちなPHPでも、高パフォーマンスなWebアプリケーションを設計することができます。


Model-View-Controller(MVC)パターンである

MVCパターンとは、アプリケーションの機能をModel、View、Controllerの3つの機能に分離するデザインパターンです。

これにより、プロジェクトの構造を把握しやすくなり、円滑な開発を実現することができます。チーム開発にも適した構造です。


Phalconの便利な機能

PhalconにはPhalcon Devtoolsという、開発を楽にするためのツールが用意されています。

これにより、プロジェクトの管理に気を取られず、開発に集中することができるようになるのが魅力です。

また、REST APIを設計しやすい機能もあります。


Phalconのインストール


必要なもの

OSに関係なくインストールする場合は以下のものが必要です。

不足しているのであれば適宜インストールしてください。

  • PHP 7.2以降
  • curl
  • fileinfo
  • gettext
  • gd2
  • imagick
  • json
  • libpcre3-dev(Debian/Ubuntu系)、pcre-devel(RedHat/CentOS系)、pcre(macOS)
  • MySQLやPostgreSQL等のRDBMS
  • OpenSSL
  • mbstring
  • memcached


Windowsの場合

XAMPP(https://www.apachefriends.org/jp/download.html)からXAMPPをダウンロードし、インストールします。

XAMPPとは、X(クラスプラットフォーム)で動くA(Apache)、M(MySQL)、P(PHP)、P(Perl)をパッケージとしてまとめたものです。

次に、こちらから自身の環境にインストールされたPHPのバージョンに適したDLLの.zipファイルをダウンロードしましょう。

PHPのバージョンは、XAMPPのシェルからコマンドで確認することができます。

また、同じようにこちらからもDLLファイルをダウンロードしてください。

ダウンロードした.zipファイルの中にある、php_psr.dllphp_phalcon.dllC:\xampp\php\extというディレクトリに置きます。

次に、「C:\xampp\php\php.ini」を適当なテキストエディタ(メモ帳など)で開き、最後の行に以下の記述を追加しましょう。

  • extension=php_psr.dll
  • extension=php_phalcon.dll

ページ内検索(Ctrl+F)でPhalconと検索し、無事Phalconの項目が表示されていればインストール完了です。

次にXAMPPのコントロールパネルからApacheを起動して、http://localhost/dashboard/phpinfo.phpにアクセスします。


macOSとLinuxの場合

Apacheと、PHPのExtensionをインストールするために必要なPECLがインストールされていることが前提です。

macOSとLinuxは、以下のコマンドを実行するだけでインストールすることができます。

  • sudo pecl channel-update pecl.php.net
  • sudo pecl install psr
  • sudo pecl install phalcon

次に、インストールしたpsrとphalconを有効にするために、php.iniに以下の記述を追加する必要があります。

apache2とcliの両方のphp.iniに追加してください。

  • extension=psr.so
  • extension=phalcon.so

phpinfoにPhalconの項目があればインストール完了です。


Phalcon Devtoolsのインストール

Phalcon Devtoolsとは、Phalconを便利に扱うための開発者ツールです。

PHPのパッケージマネージャのcomposerがインストールされていることが前提です。

以下のコマンドでPhalcon Devtoolsをインストールすることができます。

  • composer global require phalcon/devtools

以下のコマンドを使うことができればPhalcon Devtoolsのインストール完了です。

  • phalcon

実行できないのであれば、バイナリにパスが通っていない可能性があります。composerのパスを通してください。

これでついにPhalconの環境が整いました。


Phalconのチュートリアル


プロジェクトの雛形の生成

Phalconのプロジェクトの雛形は、以下のコマンドで生成することが可能です。今回は/var/wwwで実行します。

  • sudo phalcon create-project tutorial

次に、Apacheの設定をこのように設定してください。

  1. DocumentRoot /var/www/tutorial
  2. <Directory “/var/www/tutorial”>
  3. AllowOverride All
  4. Allow from All

ファイル構造localhostにアクセスして、「Congratulations!」という英文が表示されたら成功です。

プロジェクトのファイル構造は以下のようになっています。

これは、MVCパターンに基づいた構造です。

  1. tutorial
  2. ├── app
  3. │ ├── config
  4. │ │ ├── config.php
  5. │ │ ├── loader.php
  6. │ │ ├── router.php
  7. │ │ └── services.php
  8. │ ├── controllers
  9. │ │ ├── ControllerBase.php
  10. │ │ └── IndexController.php
  11. │ ├── library
  12. │ ├── migrations
  13. │ ├── models
  14. │ └── views
  15. │ ├── index
  16. │ │ └── index.phtml
  17. │ ├── index.phtml
  18. │ └── layouts
  19. ├── cache
  20. ├── index.html
  21. └── public
  22. ├── css
  23. ├── files
  24. ├── img
  25. ├── index.php
  26. ├── js
  27. ├── temp
  28. ├── webtools.config.php
  29. └── webtools.php


ハローワールド

app/controllers/IndexController.phpを次のように編集してください。

  1. <?php
  2. declare(strict_types=1);
  3. class IndexController extends ControllerBase
  4. {
  5. public function indexAction()
  6. {
  7. return ‘<h1>Hello, world!</h1>’;
  8. }
  9. }

これでlocalhostにアクセスすると、画面に「Hello, world!」と表示されるはずです。


コントローラーの生成

以下のコマンドを実行することで新たなコントローラーを生成することができます。

  • sudo phalcon create-controller –name order

生成されたコントローラーはapp/controllers/OrderController.phpとなります。


注文フォームの作成

ネットショップなどにある注文フォームを作成してみましょう。

まずは以下のコマンドで新しいviewを作成します。

  • sudo mkdir app/views/order

次は、以下の内容のapp/views/order/index.phtmlを作成しましょう。

  1. <h2>注文フォーム</h2>
  2. <?php echo $this->tag->form(“order/send”); ?>
  3. <p>
  4. <label for=”name”>名前</label>
  5. <?php echo $this->tag->textField(“name”); ?>
  6. </p>
  7. <p>
  8. <label for=”product”>商品名</label>
  9. <?php echo $this->tag->textField(“product”); ?>
  10. </p>
  11. <p>
  12. <?php echo $this->tag->submitButton(“確定”); ?>
  13. </p>
  14. </form>

http://localhost/orderにアクセスすると、作成した注文フォームがWebブラウザで表示されます。

しかしこの状態で確定ボタンを押すと以下のエラーが発生してしまうので、その解消が必要です。

  • Action ‘send’ was not found on handler ‘order’

このエラーは、app/controllers/OrderController.phpを以下のように編集すると解決します。

  1. <h2>注文フォーム</h2>
  2. <?php echo $this->tag->form(“order/send”); ?>
  3. <p>
  4. <label for=”name”>名前</label>
  5. <?php echo $this->tag->textField(“name”); ?>
  6. </p>
  7. <p>
  8. <label for=”product”>商品名</label>
  9. <?php echo $this->tag->textField(“product”); ?>
  10. </p>
  11. <p>
  12. <?php echo $this->tag->submitButton(“確定”); ?>
  13. </p>
  14. </form>


データベースの作成

注文データを格納するためのデータベースとそのテーブルを作成します。

まずはデータベースに接続しましょう。

sudo mysql -u root

次にユーザーを作成してください。

  • CREATE USER ‘taro’@’localhost’ IDENTIFIED BY ‘pass’;

以下のコマンドで一度データベースからログアウトします。

  • EXIT;

今度は先程作成したユーザーでデータベースに接続してください。

sudo mysql -u taro -p

ユーザーに権限を付与しましょう。

  • GRANT ALL PRIVILEGES ON *.* TO ‘taro’@’localhost’ IDENTIFIED BY ‘pass’ WITH GRANT OPTION;

データベースを作成します。

  • CREATE DATABASE tutorial;

作成で来たらデータベースにアクセスしてください。

USE tutorial;

テーブルを作成します。

  1. CREATE TABLE `orders` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `name` varchar(128) NOT NULL,
  4. `product` varchar(128) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. );

最後に再び「EXIT;」を入力してデータベースからログアウトして終了です。


モデルの作成

注文内容を記録するモデルを作成してみましょう。

以下の内容でapp/models/Orders.phpを作成します。

  1. <?php
  2. use Phalcon\Mvc\Model;
  3. class Orders extends Model
  4. {
  5. public $id;
  6. public $name;
  7. public $product;
  8. }


データベースの接続設定

app/config/config.phpを編集することで、適切なデータベースへのログイン情報を入力して設定完了です。

  1. database’ => [
  2. adapter’ => ‘Mysql’,
  3. host’ => ‘localhost’,
  4. username’ => ‘taro’,
  5. password’ => ‘pass’,
  6. dbname’ => ‘tutorial’,
  7. charset’ => ‘utf8’,
  8. ]


注文データの保存

app/controllers/OrderController.phpを以下のように編集します。

  1. <?php
  2. declare(strict_types=1);
  3. class OrderController extends \Phalcon\Mvc\Controller
  4. {
  5. public function indexAction()
  6. {
  7. }
  8. public function sendAction()
  9. {
  10. $order = new Orders();
  11. $order->name = $this->request->getPost(“name”);
  12. $order->product = $this->request->getPost(“product”);
  13. $success = $order->save();
  14. if ($success) {
  15. echo “注文が完了しました。”;
  16. } else {
  17. echo “注文に失敗しました。”;
  18. $messages = $order->getMessages();
  19. foreach ($messages as $message) {
  20. echo $message->getMessage(), “<br/>”;
  21. }
  22. }
  23. $this->view->disable();
  24. }
  25. }



注文履歴を表示する

app/controllers/OrderController.phpのindexAction()を次のように編集してください。

これは、注文履歴(Orders)をviewにordersという変数として渡すという処理になります。

  1. public function indexAction()
  2. {
  3. $this->view->orders = Orders::find();
  4. }

app/views/order/index.phtmlで注文履歴を受け取り、表示するコードを書きましょう。

  1. <h2>注文フォーム</h2>
  2. <?php echo $this->tag->form(“order/send”); ?>
  3. <p>
  4. <label for=”name”>名前</label>
  5. <?php echo $this->tag->textField(“name”); ?>
  6. </p>
  7. <p>
  8. <label for=”product”>商品名</label>
  9. <?php echo $this->tag->textField(“product”); ?>
  10. </p>
  11. <p>
  12. <?php echo $this->tag->submitButton(“確定”); ?>
  13. </p>
  14. <h2>注文履歴</h2>
  15. <table class=”table table-bordered table-hover”>
  16. <thead class=”thead-light”>
  17. <tr>
  18. <th>注文番号</th>
  19. <th>名前</th>
  20. <th>商品名</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. <?php foreach ($orders as $order) { ?>
  25. <tr>
  26. <td><?php echo $order->id; ?></td>
  27. <td><?php echo $order->name; ?></td>
  28. <td><?php echo $order->product; ?></td>
  29. </tr>
  30. <?php } ?>
  31. </tbody>
  32. </table>
  33. </form>

上手くいけば、注文フォームの下に注文履歴が表示されます


Phalconの学習の参考になるサイト

Phalconには公式ドキュメント(https://docs.phalcon.io/4.0/en/introduction)が用意されており、掲載されている情報もかなり多いです。

また、学習に役立つYouTubeの公式チャンネルも用意されています。

さらに、Phalconユーザーが集まるDiscordサーバーや公式フォーラムもあるので、参考にしてみると良いでしょう。


Phalconの採用例

Phalconは多くのWebアプリケーションに採用されています。

  • Learny Online
  • DescontoCupom
  • Marchi Auto
  • Socialveo
  • Outsmart
  • Free CMS Templates
  • Oisie.com
  • 24sata.rs
  • RightCasino
  • QuidditchUK
  • Danzer Logs
  • Giada
  • Robinson Travel Agency Website
  • Imageboard for intelligent individuals
  • Phalcon Powered Email Campaign Platform
  • Phalcon Community Discussion Forum


Phalconのスポンサー

Phalconはその高性能さから、以下の企業から支持されています。

  • mctekk
  • CloudFlare
  • Abits
  • Crowdin
  • Algolia
  • O₂
  • Netlify
  • Uptrends


おわりに

Phalconは高パフォーマンスで、チーム開発もしやすい多機能なWebフレームワークです。

Phalconの詳しい説明や、最新情報については公式サイトやGitHub紹介したサイトを確認するようにしてください。