- ローカル環境 (XAMPP for Windows 1.8.2)
- OS: Windows7
- Phalcon 1.2.4
- DB: SQLite3
- Scaffoldとは
- devtoolsのダウンロード
- devtoolsの設置
- PHPとdevtoolsまでのパスを通す
- Phalconプロジェクト(アプリ)を作成
- データベースを作成する
- DB関連の設定ファイルを変更する
- Scaffoldを実行する
- (補足)ベースURIの設定
- デモサイト(fortrabbit)
- デモサイトのGitHubレポジトリ
- Phalconローカル環境構築(Windows7)
- Phalconローカル環境構築(Ubuntu)
- PhalconプロジェクトをScaffoldで作る(Windows7)
- PhalconをPaaSにデプロイする(fortrabbit)
Scaffoldの機能を使うことで、CRUD機能を簡単に作成できます。
初期設定を除けば、実際の手順は下記の3段階です。
- Phalconプロジェクトを作成
- データベースの設定
- Scaffold実行
ScaffoldはPhalconの初期機能には含まれていません。
別途、Phalcon Developer Tools on Windows(devtools)をインストールする必要があります。
まずは、下記の入手先から写真のように右下のボタンをクリックしてダウンロードします。
解凍したフォルダを任意の場所に移します。
例として、Cドライブの直下に設置します。
C:\phalcon-devtools-master
次に、phalcon.bat
をテキストエディタで開いてdevtoolsまでのパスを指定します。
@echo off
set PTOOLSPATH=C:\phalcon-devtools-master
php %PTOOLSPATH%\phalcon.php %*
コントロール パネル\システムとセキュリティ\システム
を開いて、システムの詳細設定
をクリックします。
詳細設定
タブの環境変数
ボタンをクリックします。
上の"ユーザー環境変数"ではなく、 下の システム環境変数
のPath
の項目を選択して編集
ボタンをクリックします。
下記のふたつのパスを追加します。
(※ 既存のパスの末尾にセミコロンが付いている場合は、下記の先頭のセミコロンは必要ありません。)
;C:\xampp\php;C:\phalcon-devtools-master
コマンドプロンプトでphp -v
と phalcon
をそれぞれ実行して、正しく設定されていることを確かめてください。
>php -v
PHP 5.4.19 (cli) (built: Aug 21 2013 01:12:03)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
>phalcon
Phalcon DevTools (1.2.4)
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
コマンドプロンプトを開いて、XAMPPのWebサーバ内で下記のコマンドを実行します。
store
フォルダが新たに作られます。
>phalcon create-project store
Phalcon DevTools (1.2.4)
Success: Controller "index" was successfully created.
Success: Project 'store' was successfully created.
SQLiteをGUIで操作するソフトとして下記の"TkSQLite"をお勧めします。
2013年11月6日現在の最新版は 0.5.10 です。
\app\db\
にtest.sqlite3
というSQLiteファイルを作成し、下記の内容でテーブルを作ります。
CREATE TABLE 'products' (
'id' INTEGER PRIMARY KEY,
'type_id' INTEGER',
'name' CHAR,
'price' CHAR,
'quantity' INTEGER,
'status' CHAR
)
SQLiteの場合はhost
, username
, password
の値は空白にします。
また、dbname
はSQLiteファイルへのパスを指定します。
<?php
// \store\app\config\config.php
return new \Phalcon\Config(array(
'database' => array(
'adapter' => 'Sqlite',
'host' => '',
'username' => '',
'password' => '',
'dbname' => __DIR__ . '/../../app/db/test.sqlite3',
),
// (省略)
さらに、SQLiteの場合はservice.php
の変更も必要です。
<?php
// \app\config\service.php
/**
* Database connection is created based in the parameters defined in the configuration file
*/
$di->set('db', function() use ($config) {
return new DbAdapter(array(
'host' => $config->database->host,
'username' => $config->database->username,
'password' => $config->database->password,
'dbname' => $config->database->dbname
));
});
<?php
// \app\config\service.php
/**
* Database connection is created based in the parameters defined in the configuration file
*/
/*
$di->set('db', function() use ($config) {
return new DbAdapter(array(
'host' => $config->database->host,
'username' => $config->database->username,
'password' => $config->database->password,
'dbname' => $config->database->dbname
));
});
*/
$di->set('db', function() {
return new \Phalcon\Db\Adapter\Pdo\Sqlite(array(
'dbname' => '../app/db/test.sqlite3'
));
});
DbAdapter
ではなく \Phalcon\Db\Adapter\Pdo\Sqlite
のインスタンスでなければエラーが発生してしまいます。
また、SQLiteファイルへのパスの指定がconfig.php
とは異なっていることに注意してください。
中身が空のプロジェクトとデータベースは準備できたので、Scaffoldを実行してCRUD機能に関するファイルを自動生成します。
>phalcon scaffold --table-name products
Phalcon DevTools (1.2.4)
Success: Model "products" was successfully created.
C:\Users\Yuusaku\store\app\config/../../app/controllers/ProductsC
ontroller.php
C:\Users\Yuusaku\store\app\config/../../app/views/products/index.
phtml
C:\Users\Yuusaku\store\app\config/../../app/views/products/search
.phtml
C:\Users\Yuusaku\store\app\config/../../app/views/products/new.ph
tml
C:\Users\Yuusaku\store\app\config/../../app/views/products/edit.p
html
下記のようにstoreプロジェクトの中のproductsコントローラにアクセスしてみてください。
写真のような画面が表示されれば成功です。
http://localhost/store/products
必須の設定ではありませんが、ドキュメントルートからPhalconアプリまでのパスが環境によって異なる場合は指定しなければなりません。
下の例では、ローカルの開発環境ではWebサーバのドキュメントルート直下ではなくサブフォルダが介在しているので、分岐を設けてそれぞれのベースURIを設定しています。
- 本番: http://foo.com/ (ドキュメントルート直下)
- 開発: http://localhost/bar/ (サブフォルダの中)
<?php
// \app\config\service.php
/**
* The URL component is used to generate all kind of urls in the application
*/
$di->set('url', function() use ($config) {
$url = new UrlResolver();
$url->setBaseUri($config->application->baseUri);
return $url;
}, true);
<?php
// \app\config\service.php
/**
* The URL component is used to generate all kind of urls in the application
*/
/*
$di->set('url', function() use ($config) {
$url = new UrlResolver();
$url->setBaseUri($config->application->baseUri);
return $url;
}, true);
*/
$di->set('url', function() use ($config) {
$url = new Phalcon\Mvc\Url();
// Windowsの"Users"フォルダがパスに含まれているかどうかで見分ける
if (preg_match('/Users/', __DIR__)) {
// 開発環境 http://localhost/bar/
$url->setBaseUri('/bar/');
} else {
// 本番環境 http://foo.com/
$url->setBaseUri('/');
}
return $url;
}, true);