Phalcon

Phalconのチュートリアル1

更新日:

今日は、Phalconの公式サイトのチュートリアル1に沿って勉強していきたいと思います。チュートリアルに沿るといっても、チュートリアル通りにファイル構造やファイルを一から作成するのではなく、前回Developer Toolsによって自動生成されたプロジェクトを使って勉強します。

詳細に関しては、Phalconの公式サイトをご参照ください。

チュートリアル1:例題で学習しよう

サインアップコントローラの作成

前半の、ファイル構造やBootstrapファイル(app/index.php)の説明などは、公式サイトを単に読むだけで理解できるので、すっ飛ばして、サインアップコントローラの作成から始めます。

まず、「signup」という名前のコントローラを作成するために、コマンドプロンプトで下記のように入力します。

cd C:\xampp\htdocs\phalcon
phalcon controller signup

毎回、cd:C\xampp\htdocd\phalconと入力するのは、面倒なので、下記のようにAliasを作成することができます。

doskey cdp=cd C:\xampp\htdocs\phalcon

これで、cdpと入力すると、Phalconフォルダに簡単に移動することができますが、コマンドプロンプトは、一度閉じると、マクロは消えてしまいます。

ですので、ちょっと寄り道しますが、下記のようなバッチファイルを作成して、コマンドプロンプト起動時に読み込ませるように設定したいと思います。

  1. C:\Users\Hide\macros.batという名前でファイルを作成し、下記のように記述します。
    doskey cdp=cd C:\xampp\htdocs\phalcon
    cd C:\Users\Hide
  2. 次に、コマンドプロンプト右クリック→プロパティでコマンドプロンプトのプロパティを開きます。
  3. ショートカットのリンク先の%windir%\system32\cmd.exeの後に半角スペースをつけて下記を追加します。
    /k C:\Users\Hide\macros.bat
  4. 入力が終わったら、OKを押して保存します。
    2015-04-02 12-59-51
  5. これで、今度からコマンドプロンプトを起動すると自動的にマクロ(Alias)が読み込まれます。
  6. 追加したいマクロ(Alias)があれば、macros.batファイルに追加しておけばいつでも便利なマクロ(Alias)付きのコマンドプロンプトが起動します。
  7. 只、一つだけ面倒な点は、コマンドプロンプトを起動するたびにセキュリティチェックのユーザーアカウント制御ダイアログが表示される点です。

これで、app/controllers/SignupController.phpが生成され、中には、indexAction()のみが生成されています。

2015-04-02 10-42-22

 サインアップフォーム(View)の作成

フォーム(ビュー)ファイルをDeveloper Toolsでは自動生成してくれませんので、手打ちで作成します。

その前に、サインアップフォームへの入り口のリンクをapp/views/index/index.voltに追加します。

<p><a href="signup">サインアップはこちらへ!</a></p>

2015-04-02 14-23-35

そして、app/views/signupフォルダとその中にビューファイル(index.volt)を作成し、下記のように記述します。

<?php use Phalcon\Tag;?>
 <h2>サインアップ</h2>
<?php echo Tag::form("signup/register"); ?>
<p>
 <label for="name">お名前</label>
 <?php echo Tag::textField("name") ?>
 </p>
<p>
 <label for="email">E-Mail</label>
 <?php echo Tag::textField("email") ?>
 </p>
<p>
 <?php echo Tag::submitButton("登録") ?>
 </p>
</form>

 

phalcon\Tagコンポーネントは、htmlのタグを生成するためのクラスです。

  • Tag::form()メソッドは、フォームの開始タグを生成します。引数にフォームのURLを指定するか、連想配列で要素を指定できます。
    Phalcon\Tag::form(['posts/save','method'=>'post']);
  • Tag::textField()メソッドは、inputタグのtextフィールドを生成します。引数に、text名を指定するか、連想配列で要素を指定します。
    phalcon\Tag::textFied(['name','size'=>30]);
  • Tag::submitButton()メソッドは、フォームのsubmitボタンタグを生成します。引数にボタン名か、連想配列で要素を指定します。
    phalcon\Tag::submitButton(['save','class'=>'button']);

2015-04-02 14-21-00

現状、「登録」ボタンをクリックしても、regiserAction()を作成していないので、エラーが表示されます。SignupControllerに下記のように中身は空白のままregisterAction()を追加します。

public function registerAction()
 {
}

 モデルの作成

次に、データを操作するためのモデルを作成するのですが、データベーステーブルがなければモデルは作成できませんので、phpMyAdminを使って、usersテーブルを作成します。

手動で作成してもいいのですが、公式サイトにSQLが記述していますので、そのまま使用します。

phpMyAdminのSQLタブをクリックし、フォーム内に、公式サイトのSQLをコピー&ペーストします。

2015-04-02 14-36-55

usersテーブルが生成されました。

2015-04-02 14-38-38

usersテーブルが生成されたら、モデルを作成するためのコマンドを入力します。

コマンドプロンプトから、phalcon model users と入力します。

phalcon model users

2015-04-02 15-03-24

models/User.phpファイルが生成されました。中身は下記のようになっています。

<?php
use Phalcon\Mvc\Model\Validator\Email as Email;
class Users extends \Phalcon\Mvc\Model
{
/**
 *
 * @var integer
 */
 public $id;
/**
 *
 * @var string
 */
 public $name;
/**
 *
 * @var string
 */
 public $email;
/**
 * Validations and business logic
 */
 public function validation()
 {
$this->validate(
 new Email(
 array(
 'field' => 'email',
 'required' => true,
 )
 )
 );
 if ($this->validationHasFailed() == true) {
 return false;
 }
 }
/**
 * Independent Column Mapping.
 */
 public function columnMap()
 {
 return array(
 'id' => 'id', 
 'name' => 'name', 
 'email' => 'email'
 );
 }
}
  • E-mail専用のバリデーションが自動生成されているみたいですね。テーブル内にemailというフィールドがあれば自動的に生成するようにできているのでしょうか。nameに対するvalidationの作成方法は?
  • columMap()というメソッドが生成されていますが、フィールド名とモデルのプロパティ名のマッピングでしょうか。これが生成されているということは、同じ名前のフィールド名とプロパティ名を自動的にマッピングする機能はついていないということでしょうか。?

モデルを使用したデータの保存

ここは、公式サイトをそのまま流用させていただきます。SignupControllerのregisterAction()を下記のように修正します。

public function registerAction()
 {
$user = new Users();
//Store and check for errors
 $success = $user->save($this->request->getPost(), array('name', 'email'));
if ($success) {
 echo "Thanks for registering!";
 } else {
 echo "Sorry, the following problems were generated: ";
 foreach ($user->getMessages() as $message) {
 echo $message->getMessage(), "<br/>";
 }
 }
$this->view->disable();
 }

それでは、まず、なにも入力しないで、登録ボタンをクリックしてみます。

2015-04-02 15-36-43

E-mailだけでなく、nameに関しても、required(必須)しています。これは、一体どういうことでしょうか。上記のモデルを見る限り、nameに関するバリデーションの記述は見当たりませんでした。もしやと思い、usersテーブルのnameフィールドのデフォルト値をNULLに設定したら、nameに関するバリデーションは、消えていました。これは、とても便利ですね。

2015-04-02 15-47-31

それでは、実際に登録してみましょう。

2015-04-02 15-51-23

無事、登録されました。

2015-04-02 15-52-50

本日は、ここまでにします。チュートリアルをざっと目を通しただけですが、Phalconは、かなり使いやすいフレームワークのような気がします。

プログラムのスピードだけでなく、アプリの開発スピードも速そうですね。(*^▽^*)

-Phalcon

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.