‘PHP’ カテゴリーのアーカイブ
PHP カンファレンス福岡 2016 に参加しました
- 2016/05/23
- shun
『Laravel リファレンス』発売、電子とキャンプ、そして紙
muraveです。最近はCakePHP(2系)を扱っていてLaravelはすっかりご無沙汰です。
2016/1/8 に株式会社インプレスより発売された『Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク』(以降『Laravelリファレンス』)の見本誌を頂きました。ありがとうございます!
電子書籍のはなし
『Laravelリファレンス』、電子書籍版も同日に発売されました。すばらしい!
見本誌をいただけるというお話はあったのですが辛抱たまらず「田舎で最速で読むには電子書籍だべやばってん荒川」(嘘方言)とKindle版の予約をクリッククリックしておりました。
おかげで発売日の0時から読み始めることができましたが残念な点もかなり。
PHPの関数やメソッドで多値を返すときのパターン
- 2016/01/05
- murave
PHP カンファレンス福岡に(ry
- 2015/06/28
- shun
PHPカンファレンス福岡2015 に参加しました
murave@プレモル1本目です。
2015年6月27日に開催された PHPカンファレンス福岡2015 に参加しました。
私が参加したのは以下の通り。
・開会式・スポンサー紹介
・基調講演「全てを結ぶ力」(郡山 昭仁 @koriym)
・あなたと秘伝のタレ mid 2015 (石田 絢一 @uzulla)
・10年超えるサービスのphpバージョンを4から最新にする話 (小田 知央 @linyows)
・CakePHP3ウォークスルー (長谷川 智希 @tomzoh)
・CodeIgniter update (宮川 貴子 @NEKOGET)
・Laravel5を使って開発してみた (野田 健夫)
・Phalcon PHPフレームワーク Sense of Use (近藤 和宏)
・CakePHPを業務で使ってみた(7年ほど) (小山 健一郎 @k1LoW)
・インフラエンジニアからレガシーPHPへのレイヤーアップ (山下 和彦)
・レイヤードアーキテクチャを意識したPHPアプリケーションの構築 (新原 雅司 @shin1x1)
・ライトニングトーク
・閉会式
baserCMS 3.0.7 でカテゴリ名、簡単に取れました
muraveです。
チョイ前の記事
『baserCMSを3.0.2から3.0.7へ。ところでカテゴリ名ってまだ簡単に取れないんです?』
で、タイトル通りの疑問を書いてましたら親切な匿名の方からコメントで情報を頂きました。
曰く、$category = $this->BcPage->getCategory(); echo h($category[‘title’]);
$categoryへの代入等はこちらで追加させてもらいましたが、確かにこれです!
ありがとうございます。
てなわけで、getCategory関数を使用してのカテゴリーのタイトル取得は以下のようになりました。
//カテゴリーのタイトルを取得
$category = $this->BcPage->getCategory();
$product_title = $category['title'];
真っ当感、ありますな。
ところで、このgetCategory関数のリファレンス、http://wiki.basercms.net/関数リファレンス/getCategoryにあったんですが、用例が変ですね。
BcPage->getCategory() ?>
でカテゴリー名が出力されるように読めるんですが、getCategory関数の返り値はarrayですのでそのままechoしちゃだめです。
『Laravelエキスパート養成読本』献本いただいたのでキャンプへGO!
baserCMSを3.0.2から3.0.7へ。ところでカテゴリ名ってまだ簡単に取れないんです?
muraveです。どもども。
時間ができたので自社サイトのbaserCMSを3.0.2から3.0.7へアップデートしました。今朝。
残念ながら順調にはいかなかったので自分のためにもメモを残しておこうと思います。
ところでカテゴリ名ってまだ簡単に取れないんです?(前振り)
■ アップデート処理を実行出来なかった件
スマートURLをオンにした状態ではアップデート処理を実行できませんでした
ギニャーーーー!
WordPress(ココ)と同居していることもあって.htaccessにいろいろと設定を追加しているせいかPOST先のページにアクセスできなかった模様。
スマートURLについて手作業でオフ、.htaccessを調整して実行しました。
/app/config/install.php の次の行をコメントアウト。
//Configure::write('App.baseUrl', '');
/app/webroot/.htaccess の一部をコメントアウト
RewriteEngine on
RewriteBase /app/webroot
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
もちろん実行後、手作業で元に戻しました。
■ レイアウトの中でカテゴリ名を取得していたページが全滅
どうかんがえてもイリーガルなことをやっていたので文句はいえないのですが、参りました。
イリーガルなことってのはこういうこと。
//カテゴリーのタイトルを取得
$product_record = $this->BcBaser->PageCategory->find('first',array(
'fields' => array('title'),
'conditions' => array('name' => $product_category),
'recursive' => -1,
));
$product_title = $product_record['PageCategory']['title'];
3.0.7のコードを調べた所 $this->BcBaser を $this->Page に変えたら行けそうな気がしたのですが、気のせいだったのでさらにイリーガル感が増してしまいました。
//カテゴリーのタイトルを取得
$page_category = new PageCategory(false, null, 'baser');
$product_record = $page_category->find('first',array(
'fields' => array('title'),
'conditions' => array('name' => $product_category),
'recursive' => -1,
));
$product_title = $product_record['PageCategory']['title'];
本当はこんなことしたくないんです! カテゴリ名って簡単に取れるようになってるんでしょうか?
Jenkinsでphpcsする。
1.今回は、Jenkinsでphpcsを使う手順を書いていきます。
最近CakePHPの仕事をやっているのでcakephp-codesnifferを使用します。
2.phing、phpcs、cakephp-codesnifferのインストール
とりあえず、以下の作業はjenkinsユーザーで行いました。
phing、phpcsのインストール
phpcsはphingと一緒に入ります。
composer global require 'phing/phing:2.*'
cakephp-codesnifferのインストール
composer global require 'cakephp/cakephp-codesniffer'
全ユーザーでコマンドを使えるように/etc/profileに以下の行を追加
(composer globalだと対象ユーザーのホームの.composerにインストールされます。)
export PATH="$PATH:/var/lib/jenkins/.composer/vendor/bin"
phpcsでcakephp-codesnifferを使えるようにします。
/var/lib/jenkins/.composer/vendor/bin/phpcs --config-set installed_paths /var/lib/jenkins/.composer/vendor/cakephp/cakephp-codesniffer
以下のコマンドでCakePHPが表示されればOKです。
phpcs -i
3.phingの設定
Jenkinsの管理→システムの設定を押下
Phingの追加を押下し、以下のように入力します。
4.Jenkinsのプラグインのインストール
以下のプラグインをインストールします。
Checkstyle Plugin
Phing Plugin
PHP Plugin
Git Plugin
5.ジョブの実行手順
①gitでプロジェクトを取得
②phingでphpcsを実行
プロジェクトの構成は以下のようになります。
appがCakePHPのプロジェクトディレクトリで
build.xmlがphingのbuildファイル
buildディレクトリにphpcsの設定ファイルを入れています。
phingのbuildファイルは以下のようにしました。
build.xml
上記の設定の場合次のコマンドを実行するのと同じになります。
phpcs --standard=${basedir}/build/phpcs.xml --report=checkstyle --report-file=${logdir}/phpcs-report.xml ${appdir}
変数を展開すると以下のような感じ
phpcs --standard=/var/lib/jenkins/jobs/phpcs-test/workspace/build/phpcs.xml --report=checkstyle --report-file=/var/lib/jenkins/jobs/phpcs-test/workspace/build/logs/phpcs-report.xml /var/lib/jenkins/jobs/phpcs-test/workspace
phpcsの設定ファイルは以下のようにしました。
phpcs.xml
*database.php
*i18n.php
*core.php
*/app/Config/*
*/app/Console/*
*/app/Lib/*
*/app/Plugin/*
*/app/tmp/*
*/app/Vendor/*
*/app/webroot/*
*/app/Test/*
*/app/View/Helper/*
6.新規ジョブの作成
新規ジョブ作成を押下します。
ジョブ名を入力し、「フリースタイル・プロジェクトのビルド」を選択します。
ソースコード管理を設定後、ビルド手順の追加で「Phingの呼出し」を選択します。
使用するPhingでmyphingを選択
Phingの呼出しに「phpcs」と入力します。
設定ファイルとの関連は次のようになります。
7.試してみる
以下のようにメソッドを追加してビルドを試してみます。
log('hoge', LOG_DEBUG);
}
}
コメントでhogeと@return voidの間に1行必要
hoge(){でhoge()と{の間にスペースが必要とでています。
難しい・・。
8.sublime-phpcsを使ってみる
package controllでPhpcsをインストールします。
ローカルで以下のコマンドを実行します。
composer global require 'phing/phing:2.*'
composer global require 'cakephp/cakephp-codesniffer'
~/.composer/vendor/bin/vendor/bin/phpcs --config-set installed_paths ~/.composer/vendor/bin/vendor/cakephp/cakephp-codesniffer
Preferences→Package Settings→PHP Code Sniffer→Settings – Userと開きます。
以下のように記述します。
{
"phpcs_executable_path": "/ユーザーのホームディレクトリ/.composer/vendor/bin/vendor/bin/phpcs",
"phpcs_additional_args": {
"--standard": "CakePHP"
},
}
これでだめなところを表示してくれるようになりました。
pChart2でグラフを描く
ロウソクチャートが使えるライブラリを探してみたところ、
pChart2というライブラリを見つけましたので紹介したいと思います
もともとあったpChartから更に扱えるグラフの種類が増えました
addPointsに配列で値を入力することで、グラフに値が描画されます
今回はDBから値を抜き出して配列にしているのですが、そこは省略しています
// グラフ生成
$dir = dirname(__FILE__) .'/../../public/pChart/';
include($dir .'class//pData.class.php');
include($dir .'class/pDraw.class.php');
include($dir .'class/pImage.class.php');
include($dir .'class/pStock.class.php');
/* Create and populate the pData object */
$MyData = new pData();
$MyData->addPoints($addOpen,"Open");
$MyData->addPoints($addClose,"Close");
$MyData->addPoints($addMin,"Min");
$MyData->addPoints($addMax,"Max");
$MyData->addPoints($addDate,"Time");
$MyData->setAbscissa("Time");
$MyData->setAbscissaName("Date");
/* Create the pChart object */
$myPicture = new pImage(700,330,$MyData);
/* Turn of AAliasing */
$myPicture->Antialias = FALSE;
/* Draw the border */
$myPicture->drawRectangle(0,0,699,329,array("R"=>0,"G"=>0,"B"=>0));
$myPicture->setFontProperties(array("FontName"=>$dir ."fonts/pf_arma_five.ttf","FontSize"=>6));
/* Define the chart area */
$myPicture->setGraphArea(60,30,650,290);
/* Draw the scale */
$scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);
/* Create the pStock object */
$mystockChart = new pStock($myPicture,$MyData);
/* Draw the stock chart */
$stockSettings = array(
"BoxUpR"=>226,"BoxUpG"=>159,"BoxUpB"=>149,
"BoxDownR"=>180,"BoxDownG"=>188,"BoxDownB"=>201,
'BoxUpBorderR'=>220,'BoxUpBorderG'=>75,'BoxUpBorderB'=>66,
'BoxDownBorderR'=>127,'BoxDownBorderG'=>142,'BoxDownBorderB'=>166,
);
$mystockChart->drawStockChart($stockSettings);
/* Render the picture (choose the best way) */
$myPicture->Stroke();
$dir = dirname(__FILE__) .'/../../public/pChart/';
include($dir .'class/pData.class.php');
include($dir .'class/pDraw.class.php');
include($dir .'class/pImage.class.php');
$MyData = new pData();
$MyData->addPoints($addPoint,"Stock price");
$MyData->addPoints($addDate,"Labels");
$MyData->setSerieDescription("Labels","Months");
$MyData->setAbscissa("Labels");
/* Create the pChart object */
$myPicture = new pImage(700,330,$MyData);
/* Turn of Antialiasing */
$myPicture->Antialias = FALSE;
/* Add a border to the picture */
$myPicture->drawRectangle(0,0,699,329,array("R"=>0,"G"=>0,"B"=>0));
/* Set the default font */
$myPicture->setFontProperties(array("FontName"=>$dir ."fonts/pf_arma_five.ttf","FontSize"=>6));
/* Define the chart area */
$myPicture->setGraphArea(60,40,650,300);
/* Draw the scale */
$scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);
/* Turn on Antialiasing */
$myPicture->Antialias = TRUE;
/* Draw the line chart */
$myPicture->drawLineChart();
/* Write the chart legend */
$myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));
$myPicture->Stroke();
JpGraghとくらべても見栄えが良く、カスタマイズ性にも富んでいます
ただこのpChart2、更新がだいぶ前からされていないようなので、
その辺を注意して使わないといけないようです