zend

PhalconプロジェクトをScaffoldで作る(Windows7)

環境構成

  • ローカル環境 (XAMPP for Windows 1.8.2)
  • OS: Windows7
  • Phalcon 1.2.4
  • DB: SQLite3

目次

  1. Scaffoldとは
  2. devtoolsのダウンロード
  3. devtoolsの設置
  4. PHPとdevtoolsまでのパスを通す
  5. Phalconプロジェクト(アプリ)を作成
  6. データベースを作成する
  7. DB関連の設定ファイルを変更する
  8. Scaffoldを実行する
  9. (補足)ベースURIの設定

関連情報

Scaffoldとは

Scaffoldの機能を使うことで、CRUD機能を簡単に作成できます。

初期設定を除けば、実際の手順は下記の3段階です。

  1. Phalconプロジェクトを作成
  2. データベースの設定
  3. Scaffold実行

devtoolsのダウンロード

ScaffoldはPhalconの初期機能には含まれていません。

別途、Phalcon Developer Tools on Windows(devtools)をインストールする必要があります。 まずは、下記の入手先から写真のように右下のボタンをクリックしてダウンロードします。

devtoolsの設置

解凍したフォルダを任意の場所に移します。

例として、Cドライブの直下に設置します。

C:\phalcon-devtools-master

次に、phalcon.batをテキストエディタで開いてdevtoolsまでのパスを指定します。

@echo off

set PTOOLSPATH=C:\phalcon-devtools-master
php %PTOOLSPATH%\phalcon.php %*

PHPとdevtoolsまでのパスを通す

コントロール パネル\システムとセキュリティ\システムを開いて、システムの詳細設定をクリックします。

詳細設定タブの環境変数ボタンをクリックします。

上の"ユーザー環境変数"ではなく、 下の システム環境変数Pathの項目を選択して編集ボタンをクリックします。

下記のふたつのパスを追加します。

(※ 既存のパスの末尾にセミコロンが付いている場合は、下記の先頭のセミコロンは必要ありません。)

;C:\xampp\php;C:\phalcon-devtools-master

コマンドプロンプトでphp -vphalconをそれぞれ実行して、正しく設定されていることを確かめてください。

>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

Phalconプロジェクト(アプリ)を作成

コマンドプロンプトを開いて、XAMPPのWebサーバ内で下記のコマンドを実行します。

storeフォルダが新たに作られます。

>phalcon create-project store

Phalcon DevTools (1.2.4)


  Success: Controller "index" was successfully created.


  Success: Project 'store' was successfully created.

データベースを作成する

TkSQLiteのダウンロード(SQLite用のGUIクライアント)

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
)

DB関連の設定ファイルを変更する

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を実行する

中身が空のプロジェクトとデータベースは準備できたので、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/ProductsController.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.phtml
C:\Users\Yuusaku\store\app\config/../../app/views/products/edit.phtml

下記のようにstoreプロジェクトの中のproductsコントローラにアクセスしてみてください。

写真のような画面が表示されれば成功です。

http://localhost/store/products

(補足)ベースURIの設定

必須の設定ではありませんが、ドキュメントルートからPhalconアプリまでのパスが環境によって異なる場合は指定しなければなりません。

下の例では、ローカルの開発環境ではWebサーバのドキュメントルート直下ではなくサブフォルダが介在しているので、分岐を設けてそれぞれのベースURIを設定しています。

変更前

<?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);