Phalconモデルまとめ(0)環境構築
「最速」PHPフレームワークPhalconのモデルについて、基本事項をまとめます。この記事では、Phalconのモデルの動作確認を行うための環境構築方法について紹介します。記事執筆時のPhalconのバージョンは1.3.1です。
前提条件:VirtualBox及びVagrantをインストール済みとします(私の手元の環境はVirtualBox 4.3.10、Vagrant 1.5.2です)。
(0) Phalconセットアップ済みのVagrant Boxを導入
vagrant init phalconbox https://s3-eu-west-1.amazonaws.com/phalcon/phalcon125-apache2-php54-mysql55.box
vagrant up
vagrant ssh
なお、このboxのPhalconのバージョンは1.2.5。最新版の1.3.1を使いたい場合は、以下の手順を実行。
git clone git://github.com/phalcon/cphalcon.git cd cphalcon/build sudo ./install
(1) Phalcon DevToolsの導入
mkdir ~/bin cd ~/bin sudo apt-get install curl curl -s http://getcomposer.org/installer | php php composer.phar require phalcon/devtools dev-master sudo ln -s /home/vagrant/bin/vendor/bin/phalcon.php /usr/bin/phalcon sudo chmod ugo+x /usr/bin/phalcon
以下の一文の入ったファイルを作成して、/etc/php5/mods-available にphalcon.iniとして保存。
extension=phalcon.so
「sudo php5enmod phalcon」でPhalconを有効化。
「phalcon」コマンドを実行して、以下のように表示されればOK。
$ phalcon Phalcon DevTools (1.3.1) Available commands: commands (alias of: list, enumerate) controller (alias of: create-controller) model (alias of: create-model) all-models (alias of: create-all-models) project (alias of: create-project) scaffold migration webtools
(2) テスト用のデータベースとテーブルを作成
mysql -u root -ppass -e 'CREATE DATABASE model_practice'
以下のSQL文を create_table_robots.sql として保存し、「mysql -u root -ppass model_practice < create_table_robots.sql」を実行。
CREATE TABLE `robots` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`year` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
(3) テストデータをINSERT
以下のSQL文を insert_into_robots.sql として保存し、「mysql -u root -ppass model_practice < insert_into_robots.sql」を実行。
INSERT INTO robots (name, type, year) VALUES ('Robotina', 'mecanical', 1972);
INSERT INTO robots (name, type, year) VALUES ('Astro Boy', 'mecanical', 1952);
INSERT INTO robots (name, type, year) VALUES ('Terminator', 'cyborg', 2029);
INSERT INTO robots (name, type, year) VALUES ('VT', 'virtual', 2002);
INSERT INTO robots (name, type, year) VALUES ('AK-966', 'virtual', 1999);
「mysql -u root -ppass model_practice -e 'SELECT * FROM robots'」を実行して、上でINSERTしたデータが表示されればOK。
(4) テスト用プロジェクトを作成
cd /var/www
phalcon project model_practice
cd model_practice
(5) テスト用プロジェクトのDB設定
app/config/config.php を編集。<?php
return new \Phalcon\Config(array(
'database' => array(
'adapter' => 'Mysql',
'host' => 'localhost',
'username' => 'root',
'password' => 'pass',
'dbname' => 'model_practice',
),
'application' => array(
'controllersDir' => __DIR__ . '/../../app/controllers/',
'modelsDir' => __DIR__ . '/../../app/models/',
'viewsDir' => __DIR__ . '/../../app/views/',
'pluginsDir' => __DIR__ . '/../../app/plugins/',
'libraryDir' => __DIR__ . '/../../app/library/',
'cacheDir' => __DIR__ . '/../../app/cache/',
'baseUri' => '/model_practice/',
)
));
(6) モデルの生成
phalcon model robots
app/models の下に以下のような内容の Robots.php が生成されるはず。
<?php
class Robots extends \Phalcon\Mvc\Model
{
/**
*
* @var integer
*/
public $id;
/**
*
* @var string
*/
public $name;
/**
*
* @var string
*/
public $type;
/**
*
* @var integer
*/
public $year;
/**
* Independent Column Mapping.
*/
public function columnMap()
{
return array(
'id' => 'id',
'name' => 'name',
'type' => 'type',
'year' => 'year'
);
}
}
(7) 動作確認
public/index.phpの27行目(echoの行)をコメントアウト。これで、ブラウザ向けの出力をしなくなる。
<?php
error_reporting(E_ALL);
try {
/**
* Read the configuration
*/
$config = include __DIR__ . "/../app/config/config.php";
/**
* Read auto-loader
*/
include __DIR__ . "/../app/config/loader.php";
/**
* Read services
*/
include __DIR__ . "/../app/config/services.php";
/**
* Handle the request
*/
$application = new \Phalcon\Mvc\Application($di);
// echo $application->handle()->getContent();
} catch (\Exception $e) {
echo $e->getMessage();
}
以下の内容でmodel_practice.phpを作成
<?php
require_once __DIR__ . '/public/index.php';
$robots = Robots::find();
foreach ($robots as $robot) {
echo $robot->name, PHP_EOL;
}