Phalconの使い方を徹底解説!便利な機能や使用のメリットも紹介
「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.dllとphp_phalcon.dllをC:\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の設定をこのように設定してください。
- DocumentRoot /var/www/tutorial
- <Directory “/var/www/tutorial”>
- AllowOverride All
- Allow from All
ファイル構造localhostにアクセスして、「Congratulations!」という英文が表示されたら成功です。
プロジェクトのファイル構造は以下のようになっています。
これは、MVCパターンに基づいた構造です。
- tutorial
- ├── app
- │ ├── config
- │ │ ├── config.php
- │ │ ├── loader.php
- │ │ ├── router.php
- │ │ └── services.php
- │ ├── controllers
- │ │ ├── ControllerBase.php
- │ │ └── IndexController.php
- │ ├── library
- │ ├── migrations
- │ ├── models
- │ └── views
- │ ├── index
- │ │ └── index.phtml
- │ ├── index.phtml
- │ └── layouts
- ├── cache
- ├── index.html
- └── public
- ├── css
- ├── files
- ├── img
- ├── index.php
- ├── js
- ├── temp
- ├── webtools.config.php
- └── webtools.php
ハローワールド
app/controllers/IndexController.phpを次のように編集してください。
- <?php
- declare(strict_types=1);
- class IndexController extends ControllerBase
- {
- public function indexAction()
- {
- return ‘<h1>Hello, world!</h1>’;
- }
- }
これでlocalhostにアクセスすると、画面に「Hello, world!」と表示されるはずです。
コントローラーの生成
以下のコマンドを実行することで新たなコントローラーを生成することができます。
- sudo phalcon create-controller –name order
生成されたコントローラーはapp/controllers/OrderController.phpとなります。
注文フォームの作成
ネットショップなどにある注文フォームを作成してみましょう。
まずは以下のコマンドで新しいviewを作成します。
- sudo mkdir app/views/order
次は、以下の内容のapp/views/order/index.phtmlを作成しましょう。
- <h2>注文フォーム</h2>
- <?php echo $this->tag->form(“order/send”); ?>
- <p>
- <label for=”name”>名前</label>
- <?php echo $this->tag->textField(“name”); ?>
- </p>
- <p>
- <label for=”product”>商品名</label>
- <?php echo $this->tag->textField(“product”); ?>
- </p>
- <p>
- <?php echo $this->tag->submitButton(“確定”); ?>
- </p>
- </form>
http://localhost/orderにアクセスすると、作成した注文フォームがWebブラウザで表示されます。
しかしこの状態で確定ボタンを押すと以下のエラーが発生してしまうので、その解消が必要です。
- Action ‘send’ was not found on handler ‘order’
このエラーは、app/controllers/OrderController.phpを以下のように編集すると解決します。
- <h2>注文フォーム</h2>
- <?php echo $this->tag->form(“order/send”); ?>
- <p>
- <label for=”name”>名前</label>
- <?php echo $this->tag->textField(“name”); ?>
- </p>
- <p>
- <label for=”product”>商品名</label>
- <?php echo $this->tag->textField(“product”); ?>
- </p>
- <p>
- <?php echo $this->tag->submitButton(“確定”); ?>
- </p>
- </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;
テーブルを作成します。
- CREATE TABLE `orders` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(128) NOT NULL,
- `product` varchar(128) NOT NULL,
- PRIMARY KEY (`id`)
- );
最後に再び「EXIT;」を入力してデータベースからログアウトして終了です。
モデルの作成
注文内容を記録するモデルを作成してみましょう。
以下の内容でapp/models/Orders.phpを作成します。
- <?php
- use Phalcon\Mvc\Model;
- class Orders extends Model
- {
- public $id;
- public $name;
- public $product;
- }
データベースの接続設定
app/config/config.phpを編集することで、適切なデータベースへのログイン情報を入力して設定完了です。
- database’ => [
- adapter’ => ‘Mysql’,
- host’ => ‘localhost’,
- username’ => ‘taro’,
- password’ => ‘pass’,
- dbname’ => ‘tutorial’,
- charset’ => ‘utf8’,
- ]
注文データの保存
app/controllers/OrderController.phpを以下のように編集します。
- <?php
- declare(strict_types=1);
- class OrderController extends \Phalcon\Mvc\Controller
- {
- public function indexAction()
- {
- }
- public function sendAction()
- {
- $order = new Orders();
- $order->name = $this->request->getPost(“name”);
- $order->product = $this->request->getPost(“product”);
- $success = $order->save();
- if ($success) {
- echo “注文が完了しました。”;
- } else {
- echo “注文に失敗しました。”;
- $messages = $order->getMessages();
- foreach ($messages as $message) {
- echo $message->getMessage(), “<br/>”;
- }
- }
- $this->view->disable();
- }
- }
注文履歴を表示する
app/controllers/OrderController.phpのindexAction()を次のように編集してください。
これは、注文履歴(Orders)をviewにordersという変数として渡すという処理になります。
- public function indexAction()
- {
- $this->view->orders = Orders::find();
- }
app/views/order/index.phtmlで注文履歴を受け取り、表示するコードを書きましょう。
- <h2>注文フォーム</h2>
- <?php echo $this->tag->form(“order/send”); ?>
- <p>
- <label for=”name”>名前</label>
- <?php echo $this->tag->textField(“name”); ?>
- </p>
- <p>
- <label for=”product”>商品名</label>
- <?php echo $this->tag->textField(“product”); ?>
- </p>
- <p>
- <?php echo $this->tag->submitButton(“確定”); ?>
- </p>
- <h2>注文履歴</h2>
- <table class=”table table-bordered table-hover”>
- <thead class=”thead-light”>
- <tr>
- <th>注文番号</th>
- <th>名前</th>
- <th>商品名</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($orders as $order) { ?>
- <tr>
- <td><?php echo $order->id; ?></td>
- <td><?php echo $order->name; ?></td>
- <td><?php echo $order->product; ?></td>
- </tr>
- <?php } ?>
- </tbody>
- </table>
- </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、紹介したサイトを確認するようにしてください。