おぼえがき
おぼえがき
fuelphpでpjaxを扱う

前回、fuelphpでログ出力を調べたのもこの開発を
している際にテストが面倒くさかったため。
ブラウザ対応の問題とかもあるが、pjaxを使うと読込速度や
SEO等々も考えると、なかなかいいと思う。
実装する動きは、画面Aから画面Bに遷移。
メインのコンテンツのみを入れ替えることをやる。
画面の遷移は、github見たいな動きを出きるような感じに
アニメーションも入れてみた。
テンプレートのファイル構成
view/template.php
view/welcome/画面A.php
view/welcome/画面B.php
controllerは、controller_templateを利用しているので、
側は、template.phpがやってくれて、
中身を画面A.phpと画面B.phpがやる。
でコントローラーはこんな感じ
controller
これで、いけるはず。
コメント ( 0 )
fuelphpでログ出力のmonologをちゃんと眺めてみる

20130522追記
fuelphp1.6になりここの仕様に変更が入ってます。
FuelPHP releases v1.6
monologはcomposerから直接インストールするように変わりました。Logパッケージは廃止され、CoreにLogクラスが復活しました。実質的な変更は、Logパッケージを明示的にロードしなくてもよくなったことだけです
@kenji_sさん指摘ありがとうございます
■monolog
--------------------------------------
fuelphp1.5からログ出力は monologってパッケージを利用している
monologっていろいろできるみたいで、PythonのLogbookに強く影響を受けている模様
monologって、独言って意味なんだ
■普通に使うのはかんたん
--------------------------------------
Log::info('hoge');
こんな感じで書くと、
fuel/xxx/fuel/app/logs/YYYY/MM/DD.php
に出力される。
※書き込み権限は気をつけておくこと
Log::XXXX();のXXXXは
DEBUG, INFO, WARNING, ERROR, CRITICAL, ALERT
この辺が利用できるから、適宜使えばいいや。
この辺は、どうでもいい
■monologをちゃんと利用するようにするには、configを下記のように指定する。
--------------------------------------
return array(
'always_load'=>array(
'packages'=>array(
'orm',
'log'
)
)
);
■とりあえず使ってみる
--------------------------------------
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class Controller_Welcome extends Controller_Base
{
public function action_index()
{
$log = new Logger('name');
$log->pushHandler(new StreamHandler('出力先のパス', Logger::INFO));
$log->addInfo('Foo');
$log->addWarning('Foo');
$log->addError('Bar');
}
}
これで出力されるのは、
[2013-MM-DD HH:II:SS] name.INFO: Foo [] []
[2013-MM-DD HH:II:SS] name.WARNING: Foo [] []
[2013-MM-DD HH:II:SS] name.ERROR: Bar [] []
こんな感じになる。
$log->pushHandler(new StreamHandler('出力先のパス', Logger::INFO));
こんなかんじで定義しているが、Logger::INFOとあるのは、エラーログレベルがINFO
以上のものを出力するという定義になっている。
ファイルの書き込みが必要な際は、
use Monolog\Handler\StreamHandler;
とやればいいんだけど、monologはHandlerが沢山ある。
■ハンドラの種類
--------------------------------------
StreamHandler: いま使ったやつ
RotatingFileHandler: Logs records to a file and creates one logfile per day. It will also delete files older than $maxFiles. You should use logrotate for high profile setups though, this is just meant as a quick and dirty solution.
FirePHPHandler: FireBugの中にある、FirePHPに出力するハンドラ
ChromePHPHandler: ChromePHPに出力
MongoDBHandler: MongoDBに出力
NativeMailHandler: メール配信
SwiftMailerHandler: Swift_Mailerを利用してメール配信
PushoverHandler: Pushover API(なんだろこれ)を利用して携帯にアラート送信
SyslogHandler: syslogに書き出すっぽい.
GelfHandler: Graylog2に書き出す。これ面白そう!!
SocketHandler: UNIX and TCP socketsで書き出し
AmqpHandler: ジョブキューに書き出しっぽいな
CubeHandler: なんだろうこれ
CouchDBHandler: CouchDBに書出し
DoctrineCouchDBHandler: Doctrine CouchDB ODMを利用してCouchDBに書出し
RavenHandler: ravenを利用して、Sentry serverに書出し
何かめっちゃある。
■試しにハンドラ使ってみる - NativeMailHandler
--------------------------------------
メール送信するハンドラ
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\NativeMailerHandler;
class Controller_Welcome extends Controller_Base
{
public function action_index()
{
$log = new Logger('name');
$log->pushHandler(new StreamHandler('出力先のパス', Logger::INFO));
$log->pushHandler(new NativeMailerHandler("To","from","タイトル",Logger::INFO));
$log->addInfo('Foo');
$log->addWarning('Foo');
$log->addError('Bar');
}
}
これで出来上がり
これでログ出力とメール送信が同時にできるし、pushHandlerの出力レベルをそれぞれ変えれば、ヤバそうな時だけメール送信を行うとかできる。
これは結構便利な気がするな
■試しにハンドラ使ってみる - ChromePHPHandler
--------------------------------------
まずは、ChromePHPを持ってくる
で、
use Monolog\Handler\ChromePHPHandler;
$log->pushHandler(new ChromePHPHandler());
$log->addInfo('Foo');
ってやると、'Foo'がChromeのコンソールログに反映される

ってやると、'Foo'がChromeのコンソールログに反映される
chrome phpについて
■ハンドラの振り返り
--------------------------------------
結構簡単。
ただ、ヘルプが全然無いから、monolog/Handler/配下のソースを読まないと
使い方分かんないや。
■Processors
--------------------------------------
なにやら、
IntrospectionProcessor: Adds the line/file/class/method from which the log call originated.
WebProcessor: Adds the current request URI, request method and client IP to a log record.
MemoryUsageProcessor: Adds the current memory usage to a log record.
MemoryPeakUsageProcessor: Adds the peak memory usage to a log record.
何かおもしろそうなことが出来そうな雰囲気
■Processorsを試しに使ってみる
--------------------------------------
use Monolog\Processor\IntrospectionProcessor;
use Monolog\Processor\WebProcessor;
use Monolog\Processor\MemoryUsageProcessor;
use Monolog\Processor\MemoryPeakUsageProcessor;
class Controller_Welcome extends Controller_Base
{
public function action_index()
{
$log = new Logger('name');
$log->pushHandler(new StreamHandler('ファイルのパス', Logger::INFO));
$log->pushHandler(new ChromePHPHandler());
$log->pushProcessor(new IntrospectionProcessor());
$log->pushProcessor(new WebProcessor());
$log->pushProcessor(new MemoryUsageProcessor());
$log->pushProcessor(new MemoryPeakUsageProcessor());
$log->addInfo('XXXXXXXXXXXXXXX');
}
}
もりだくさん。
結果は・・・(実際は1行)
[2013-MM-DD HH:II:SS]
name.INFO: XXXXXXXXXXXXXXX []
{
"memory_peak_usage":"1.75 MB", <=== MemoryPeakUsageProcessorの結果
"memory_usage":"1.75 MB", <==== MemoryUsageProcessor
"url":"/zemi/", <=== WebProcessorの結果
"ip":"XX.XX.XX.XX", <=== WebProcessorの結果
"http_method":"GET", <=== WebProcessorの結果
"server":"XXX.XX.jp", <=== WebProcessorの結果
"referrer":"NULL", <=== WebProcessorの結果
"file":"/fuel/app/classes/controller/welcome.php", <==== IntrospectionProcessorの結果
"line":25,"class":"Controller_Welcome", <==== IntrospectionProcessorの結果
"function":"action_index" <==== IntrospectionProcessorの結果
}
ふーん。おもろい
あとは、ログフォーマットとかハンドラの拡張とかできそうだけどいいや。
コメント ( 1 )
fuelphpのORMを利用してwhere inを作る

fuelphpのormの使い方が正直難しい・・・
where で inを実現してみる
$data = Model_xxxx::find('all', array(
'where' => array(
array('id','in',
array(
$a,
$b,
$c,
)),
),
);
Log::error(print_r($data, true));
こんなかんじ。
コメント ( 0 )
php-figのコーディング規約に準拠したコードを書く
前回、php5.4.9の環境を入れて新しい環境が手に入った。
続いて、php-figで定義されているコードを書いていこう
PHP_CodeSnifferだとコードのチェックしてくれるだけ、PHP Coding Standard Fixer
使えば、コードも直してくれる。php5.4.9入れたことだし、PHP Coding Standard Fixer
こいつを使ってみる。
psr0/psr1/psr2にあわせてコードを修正してくれる。
いろいろ、コーディング規約が乱立しているがこれで決まってほしい
で
ついでに、vimでこいつがキックできるようにする。
■PHP Coding Standard Fixerを入れる
sudo wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O ~/php-cs-fixer
sudo chmod a+x php-cs-fixer
■vimプラグインを入れる
git clone https://github.com/stephpy/vim-php-cs-fixer.git
sudo cp ~/vim-php-cs-fixer/plugin/php-cs-fixer.vim vimのプラグインの場所
■.vimrcを修正
"---- php-cs-fixer
" php-cs-fixerをインストールした場所を指定
let g:php_cs_fixer_path = "/home/xxx/php-cs-fixer"
" psr0 psr1 psr2 allを指定
let g:php_cs_fixer_level = "all"
" default sf20 sf21の指定symfonyの指定などの構造確認?が出来る
let g:php_cs_fixer_config = "default"
" phpコマンドの場所
let g:php_cs_fixer_php_path = "/home/xxx/.phpenv/versions/5.4.9/bin/php"
" フィルター(http://cs.sensiolabs.org/ここにしていされているやつが使える)
let g:php_cs_fixer_fixers_list = ""
let g:php_cs_fixer_enable_default_mapping = 1
let g:php_cs_fixer_verbose = 0
nnoremap <silent><leader>pcd :call PhpCsFixerFixDirectory()<CR>
nnoremap <silent><leader>pcf :call PhpCsFixerFixFile()<CR>
"---- / php-cs-fixer
vimでphp開いて、\pcfって入力すると、修正してくれる
ちょっとvimの設定がまだすべて、把握できていない
vimの折り畳みの書式の/*{{{*/
が入ってるとちゃんと動かない気がする
これを使って、fuelphpのソースコードのチェックを掛けるとめちゃくちゃ変更される
怖くて適応出来ない
■コマンドラインで修正
こんな感じで出来る 適当
/home/xxx/.phpenv/versions/5.4.9/bin/php ~/php-cs-fixer fix xxx_controller.php --level=psr2 --fixers=php_closing_tag,phpdoc_params --config=sf21
んー体調が悪い
続いて、php-figで定義されているコードを書いていこう
PHP_CodeSnifferだとコードのチェックしてくれるだけ、PHP Coding Standard Fixer
使えば、コードも直してくれる。php5.4.9入れたことだし、PHP Coding Standard Fixer
こいつを使ってみる。
psr0/psr1/psr2にあわせてコードを修正してくれる。
いろいろ、コーディング規約が乱立しているがこれで決まってほしい
で
ついでに、vimでこいつがキックできるようにする。
■PHP Coding Standard Fixerを入れる
sudo wget http://cs.sensiolabs.org/get/php-cs-fixer.phar -O ~/php-cs-fixer
sudo chmod a+x php-cs-fixer
■vimプラグインを入れる
git clone https://github.com/stephpy/vim-php-cs-fixer.git
sudo cp ~/vim-php-cs-fixer/plugin/php-cs-fixer.vim vimのプラグインの場所
■.vimrcを修正
"---- php-cs-fixer
" php-cs-fixerをインストールした場所を指定
let g:php_cs_fixer_path = "/home/xxx/php-cs-fixer"
" psr0 psr1 psr2 allを指定
let g:php_cs_fixer_level = "all"
" default sf20 sf21の指定symfonyの指定などの構造確認?が出来る
let g:php_cs_fixer_config = "default"
" phpコマンドの場所
let g:php_cs_fixer_php_path = "/home/xxx/.phpenv/versions/5.4.9/bin/php"
" フィルター(http://cs.sensiolabs.org/ここにしていされているやつが使える)
let g:php_cs_fixer_fixers_list = ""
let g:php_cs_fixer_enable_default_mapping = 1
let g:php_cs_fixer_verbose = 0
nnoremap <silent><leader>pcd :call PhpCsFixerFixDirectory()<CR>
nnoremap <silent><leader>pcf :call PhpCsFixerFixFile()<CR>
"---- / php-cs-fixer
vimでphp開いて、\pcfって入力すると、修正してくれる
ちょっとvimの設定がまだすべて、把握できていない
vimの折り畳みの書式の/*{{{*/
が入ってるとちゃんと動かない気がする
これを使って、fuelphpのソースコードのチェックを掛けるとめちゃくちゃ変更される
怖くて適応出来ない
■コマンドラインで修正
こんな感じで出来る 適当
/home/xxx/.phpenv/versions/5.4.9/bin/php ~/php-cs-fixer fix xxx_controller.php --level=psr2 --fixers=php_closing_tag,phpdoc_params --config=sf21
んー体調が悪い
コメント ( 0 )
phpを複数バージョン入れてfuelphpをインストールする

phpの複数のバージョンを入れて動作確認するには、
phpenvのインストールとphpbuildのインストールをすると調子良い。
phpenv:複数バージョンの切り替えを司る機能
phpbuild:複数バージョンをインストール出来る仕組み
これを使うと、自分の環境の指定したディレクトリ意外汚れないからいい感じ。
みんなにも迷惑かからない
■完成図
/home/xxx/.phpenv/version/5.4.9<-- php5.4.9が入る場所
/home/xxx/.php-buid
こんなディレクトリ構成になる
■phpenvを入れる
git clone https://github.com/CHH/phpenv.git
cd phpenv/bin/
./phpenv-install.sh
これで、phpenvの導入完成
.bashrcの修正
PATH="$PATH":/home/xxx/.phpenv/bin
eval "$(phpenv init -)"
■phpbuildを入れる
git clone https://github.com/CHH/php-build.git ~/.php-build
.bashrcの修正
PATH="$PATH":/home/xxx/.phpenv/bin:/home/xxx/.php-build/bin
■どんなバージョンが入れられるんだろう・・・確認してみる
$ php-build --definitions
5.2.17
5.3.10
5.3.11
5.3.11RC1
5.3.11RC2
:
:
めっちゃいっぱいある
■php5.4.9をいれる
そのまえに、今回cli版だけでなく、fuelphpも動かしたいので、apacheで
利用するphpのモジュール(libphp5.so)も変える必要がある。
1.現在利用しているlibphp5.soを退避させておく
(現状の環境だと、/usr/lib64/httpd/modules/配下にあるのでそれをバックアップ)
これから実行するphp-buildコマンドで、ここの、modules配下にあるlibphp5.soが
上書きされるようになるんだけど、自分の権限でここが上書きできないのであれば、
modules配下の書き込み権限を変えておく必要がある。
2.phpをbuildする設定を変える。
普通にbuildすると、libphp5.soを作ってくれないので、設定ファイルを修正
/home/xxx/.php-build/share/php-build/definitions
ここの配下にある、5.4.9を修正
configure_option "--with-apxs2" "/usr/sbin/apxs" <--- この行追加
install_package "http://downloads.php.net/stas/php-5.4.9.tar.bz2"
install_pyrus
install_xdebug "2.2.1"
apxsのパスを正しいものにすること。
3.buidする
php-build 5.4.9 ~/.phpenv/versions/5.4.9
このコマンド叩けば良いんだけど、いろいろパッケージ入れろとうるさい
sudo yum install re2c
sudo yum install libxml2-devel
sudo yum install openssl-devel
sudo yum install libcurl-devel
sudo yum install libjpeg-devel
sudo yum install libpng-devel
sudo yum install readline-devel
sudo yum install libtidy-devel
sudo yum install libxslt-devel
この位はインストールして出来上がり。
ls ~/.phpenv/versions/5.4.9/
bin etc include lib php pyrus sbin share var
こんな感じでインストール出来ている
4.ちゃんと入ったか確認
phpenv versions
* system
5.4.9 (set by /home/xxx/.phpenv/versions/5.4.9/.ruby-version)
お!5.4.9がある。これでOK
5.バージョンを切り替える
phpenv local 5.4.9
オプションにlocalとglobalが指定できる
localにすると、.phpenv/versions/5.4.9/配下のphpが5.4.9が動く
phpenv versions
system
* 5.4.9 (set by /home/xxx/.phpenv/versions/5.4.9/.ruby-version)
お!切り替わった
■php5.4.9をいれる(2)
apache経由でも動くようにする
(1)でlibphp5.soモジュールを作成している。
/usr/lib64/modules/libphp5.soが最新のものになっているはず
1.まずは、5.4.9用のモジュールを移動させる
5.4.9/lib/httpd/modules/配下に、libphp5.soを移動
2.(1)で退避させた旧バージョンを元にもどしておく
3.httpd.confの修正
php5.4.9を動かす際は、
こんな感じになる
LoadModule php5_module /home/xxx/.phpenv/versions/5.4.9/lib/httpd/modules/libphp5.so
4.じゃー動くか確認
apacheをリスタートしとく。
5.4.9/配下のディレクトリ構成は下記のような感じ。
ここのvarにdocumentrootを作っておく
bin etc include lib php pyrus sbin share var
var/www/index.php
index.phpにphpinfo();だけ入れておく。
5.これで見てみると、自分の環境は、5.4.9で動いておる
■fuelphpを入れてみる
1.環境を作る
5.4.9配下はこんな感じだけど、
bin etc include lib php pyrus sbin share var
ここに、fuelのディレクトリを作った
bin etc fuel include lib php pyrus sbin share var
documentrootはvar/www配下なので、fuel配下に設けるpublicディレクトリを
var/www/プロジェクト にたいしてシンボリックリンクを後で張る
2.fuelディレクトリ配下での作業
curl get.fuelphp.com/oil > get_installer
get_installerのファイルのPREFIXをカレントディレクトリに修正
./get_installer
これで、同じディレクトリfuel配下のディレクトリにoilが置かれる
oilコマンドの実行
するんだけど、phpを叩いてしまうと、system上動いているphpを
キックしてしまうので、php5.4.9が作動するように、oilファイルの
phpを
/home/xxx/.phpenv/versions/5.4.9/bin/php に変更する
じゃー実行
oil create プロジェクト名
できた。
プロジェクト配下にあるpublicディレクトリを5.4.9/var/www配下に対して
シンボリックリンクを張って完成
cliでphpを起動しようとすると、/etc/php.iniを見に行ってしまうので、起動するときは、
~/.phpenv/versions/5.4.9/bin/php -c /home/xxx/.phpenv/versions/5.4.9/etc/php.ini oil g controller registration
こんな感じで実行する
※php oil g controllerが全然動かなかった。
これは、phpがsystem上動いているPHPをキックするため。
oilコマンドを5.4.9の環境で実行する時は、
/home/xxx/.phpenv/versions/5.4.9/bin/php oil g controller
と言う風にしないとダメ・・・
はまった
コメント ( 0 )
« 前ページ | 次ページ » |