3 Jan 2015

[CakePHP2] データベースにログをとる

Logging(CakePHP official)
http://book.cakephp.org/2.0/en/core-libraries/logging.html
Database logging in CakePHP
http://blog.jandorsman.com/blog/database-logging-in-cakephp
一つ目の記事に書いてあることはCake2.*でもそのままつかえます。ファイルの場所が 'app/libs/log/database_logger.php'(for CakePHP 1.*) から 'app/Lib/Log/Engine/DatabaseLog.php' (for CakePHP 2.*)になるぐらいです。素晴しい。

たとえばログにセッション情報(ユーザIDとかね)を記録したい、みたいな事になったら、ユーザがログインしてるのか確かめないと、ログインしてない時に上手くログに入りません。例えばログイン失敗しました、みたいなログがきちんと取られないことになります。
public function write($type, $message) {
 $log['type'] = ucfirst($type);
 $log['created'] = date('Y-m-d H:i:s');
 $log['content'] = $message;
 if ($login = CakeSession::read('Auth.User')) {
  $log['user_id'] = $login['id'];
 }


 return $this->Log->save($log);
}

[CakePHP2]Database logging (with some Cakesession Object)

Logging(CakePHP official)
http://book.cakephp.org/2.0/en/core-libraries/logging.html
Database logging in CakePHP
http://blog.jandorsman.com/blog/database-logging-in-cakephp
Well, Jan's article is totally usable even in CakePHP 2.4 except one location 'app/libs/log/database_logger.php'(for CakePHP 1.*) to 'app/Lib/Log/Engine/DatabaseLog.php' (for CakePHP 2.*).

When you want log some information via Cakesession Object (i.e. user ID), you should check the object first in case the user not logging in.

public function write($type, $message) {
 $log['type'] = ucfirst($type);
 $log['created'] = date('Y-m-d H:i:s');
 $log['content'] = $message;
 if ($login = CakeSession::read('Auth.User')) {
  $log['user_id'] = $login['id'];
 }


 return $this->Log->save($log);
}

19 Nov 2014

[PHP]時間を15分刻みに変換する

覚え書きの殴り書き。 時間を15分刻みに変換する。切り上げ、切り捨てありです。
/*
 * dateBy15Minutes
 * @assert ("2001-03-10 17:16:18") == "2001-03-10 17:15:00"
 * @assert ("2001-03-10 17:00:00") == "2001-03-10 17:00:00"
 * @assert ("2001-03-10 17:59:59") == "2001-03-10 17:45:00"
 * @assert ("2001-03-10 17:40:18") == "2001-03-10 17:30:00"
 */

 protected function _dateBy15Minutes($mode = 'ceil',$time = NULL) {
  if (\is_null($time)) {
   $time = time();
  } else {
   $time = \strtotime($time);
  }
  if ($mode == 'ceil') {
   $minute = \sprintf("%02s", \ceil(\date('i') / 15) * 15);
  } else {
   $minute = \sprintf("%02s", \floor(\date('i') / 15) * 15);
  }
  $time_string = \date("Y-m-d H:i:s", \mktime(\date('H'), $minute));
  return $time_string;
 }

12 Nov 2014

[CakePHP2][Composer] プラグインもComposer経由でインストールするときにapp/Plugin フォルダに入れたい。

参考資料
https://github.com/composer/installers
増減するプラグインのために一個一個設置場所を書いていたのですが、うまいことでっちあげたんで、ログとして。
composer.json:
{
    "name": "app",
    "config": {
        "vendor-dir": "Vendor/"
    },
    "extra": {
        "installer-paths": {
            "app/Plugin/{$name}/": ["type:cakephp-plugin"]
        }
    },
    "require": {
        "php": ">=5.3",
        "cakephp/cakephp": "~2",
        "composer/installers": "~1",
        "cakephp/debug_kit": "~2",
        "cakephp/localized": "~2"
   }
}

3 Oct 2014

[Skype] オフラインにしてもオンラインのまま

オフラインにしてもオンラインのまま

(2014/10/03 時点)
結果からいくと、複数でログインしている場合、その全てで、上記にある「ステータスを [ログイン状態を隠す]か[オフライン] に変更」すれば、オフラインとして表示されます。(自分の場合はpc二つと、iPhoneのもの)

8 Jul 2014

[CakePHP2]サブディレクトリにCakePHPを配置

CakePHPをサブディレクトリで動かすのは、一工夫いるみたいですが、
cakePHPでサブディレクトリで運用する設定あたりを参考にして、.htacess ファイルに変更を加えてみましたがうまくいかず。Composerを使えて構築してるからなのかとも思ったのですが、、

とりあえずMAMPでの話。CakePHPのバージョンは2.5.2です。

cakePHPでサブディレクトリで運用する設定
http://localhost/test/
のようにtestディレクトリ下でcakeを展開したい場合
各フォルダの3つの.htacessに下記を追加
RewriteBase    /test
1./test/直下にある.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
   RewriteBase /test
</IfModule>
2.appディレクトリ直下の.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
    RewriteBase /test/app
</IfModule>
3.webrootディレクトリ直下の.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
 RewriteBase /test/app/webroot
</IfModule>
に加えて、
app/Config/route.phpに下の2文を加える。
        Router::connect('/test/:controller', array('action' => 'index'));
        Router::connect('/test/:controller/:action/*');
    Router::connect('/test/', array('controller' => 'pages', 'action' => 'display', 'home'));

28 May 2014

[phpunit][NetBeans] Command "Calculator" is not defined.



NetBeansの設定を終えて、チュートリアルへ。

https://netbeans.org/kb/docs/php/phpunit.html
テストを作成しようとすると、うまくいかない。
エラーメッセージが。
"/usr/bin/php" "/Users/xxxx/local/bin/phpunit-skelgen" "--test" "--" "Calculator" "/Users/xxxx/NetBeansProjects/Calculator-PHPUnit/src/Calculator.php" "CalculatorTest" "/Users/xxxx/NetBeansProjects/Calculator-PHPUnit/test/CalculatorTest.php"
phpunit-skelgen 2.0.1 by Sebastian Bergmann.
          
  [InvalidArgumentException]            
  Command "Calculator" is not defined.  

Done.

どうやらバージョンが変わってコマンド体系が変わっている模様。 しばらく手動で作成かな…