6月 262014
 

こんにちは。ファガイです。本日はちょっとPhalcon PHPをまとめてみます。

環境

  • CentOS
  • PHP 5.4
  • Phalcon 1.3.2
  • MariaDB

簡易インストール

インストール

git clone --depth=1 git://github.com/phalcon/cphalcon.git
cd cphalcon
cd build
./install

php.iniに以下を追加(別途iniファイル作ってそれに指定しないと出来ないことも)

extension=phalcon.so

apache再起動

service httpd restart

DevTools のインストール(方法1)

gitからクローン

git clone git://github.com/phalcon/phalcon-devtools.git

インストール

cd phalcon-devtools
. ./phalcon.sh

DevTools のインストール(方法2)

mkdir phalcon
cd phalcon

composer.pharを取ってくる

curl -s http://getcomposer.org/installer | php

composer.jsonを作る

{
    "require": {
        "phalcon/devtools": "dev-master"
    }
}

インストール

php composer.phar install

コマンドを使えるようににシンボリックリンクを貼る

ln -s ~/phalcon/devtools/phalcon.php /usr/bin/phalcon
chmod ugo+x /usr/bin/phalcon

使えるか確認

phalcon commands

プロジェクトを作る

phalcon create-project project_name

DevToolsを含んだプロジェクトを作る

phalcon create-project project_name --enable-webtools

アクセスするURLは通常のベースURL/webtools.phpです。

DevToolsを途中で入れたくなった時

phalconのプロジェクトのディレクトリに移動して

phalcon webtools --action --directory=.

DevToolsを消したくなった時

phalconのプロジェクトのディレクトリに移動して

phalcon webtools --action disable --directory=.

プロジェクトの中身(webtools有り)

project_name
├── .htaccess
├── app
│   ├── cache
│   ├── config
│   │   ├── config.php
│   │   ├── loader.php
│   │   └── services.php
│   ├── controllers
│   │   ├── ControllerBase.php
│   │   ├── IndexController.php
│   ├── models
│   └── views
├── index.html
└── public
    ├── .htaccess
    ├── css
    ├── files
    ├── img
    ├── index.php
    ├── js
    ├── temp
    ├── webtools.config.php
    └── webtools.php

public/index.phpについて

いわゆる最初に読むこむファイルです。
初期状態ではenvironmentの設定等が用意されていません。

なので、実際にプロジェクト等で使用する場合は以下の様な形にしておく必要があります。

“`
<?php

define('ENVIRONMENT', 'development');

if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
case 'localhost':
case 'development':
error_reporting(E_ALL);
break;

case 'testing':
case 'production':
error_reporting(0);
break;

default:
exit('The application environment is not set.');
}
}

try {

/**
* Read the configuration
*/
$config = include __DIR__ . "/../app/config/". ENVIRONMENT . "/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();
}
“`

これを行うことで環境毎のフォルダに設定情報を置くことが出来ますね。
loaderやservicesも分割しても良いかもです。

configについて

config.php

DBの設定や、applicationのディレクトリ設定等を行います。
baseUriをちゃんと指定してないとURLがおかしくなるので注意しましょう。

loader.php

phalconがオートロードするディレクトリを設定を行います。
初期状態では、config.phpで指定しておいたlibraryDir等は含まれていませんので、使用したい場合は追加する必要があります。

services.php

Diコンテナ(依存注入)を設定する為のコンフィグです。

コントローラー

ControllerBaseがベースのコントローラーとなります。

外部からコントローラーにアクセス出来るようにするにはXXXControllerのような接尾辞にControllerと付ける必要があります。
また、アクセスするためにはYYYActionのように接尾辞にActionを付ける必要があります。

YYYActionとつけると自動的にviewのアクセス箇所が決まります。
views/XXX/YYY.拡張子という形でファイルを作ることでアクセスすることが出来ます。

アクセスを拒否したい時にはそのアクション内に

“`
$this->view->disable();
“`

と書きましょう。

コントローラーからDIにアクセスする

DI(app/config/services.php)で設定した名前があったかと思いますが、こちらにアクセスする方法が複数あります。

これは非常に簡単にアクセスが出来ます。

一番簡単な方法

“`
$this->storage->save('/some/file');
“`

これだけです。$thisを使うだけで自動的にDIにアクセス出来ます。
依存性が簡単に解消されます。

他の方法

“`
$this->di->get('storage')->save('/some/file');

$this->di->getStorage()->save('/some/file');

$this->getDi()->getStorage->save('/some/file');

$this->di['storage']->save('/some/file');
“`

Postされた情報にアクセスする

単体

“`
$name = $this->request->getPost('name');
“`

全部

“`
$posts = $this->request->getPost();
“`

まとめ

こんな感じで書いてきたわけですが、まだまだ色々説明してないし、理解していない点が多いのが現状。

実はこのようにコントローラーにルーティングも書かずにアクセスしたり出来るのはservices.phpの

“`
$di = new FactoryDefault();
“`

これが全てを処理しています。
これに関しては次回の記事で書きましょうかね。

ではではー。

Pocket

 Posted by at 2:21 AM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*