カテゴリー別アーカイブ: CakePHP3

CakePHP3でログ出力する

Log出力の設定は、以下にある。(ログ出力レベルの設定)
config/app.php

実際の出力は以下の様にする。

use Cake\Log\Log;
...
Log::warning('this gets written only to error.log', ['scope' => ['error']]);

warning() を使っているが、,この他に emergency(), alert(), critical(), error(), notice(), debug(), info() などがある

CakePHP3でのtimezoneの考え方

timezone頭痛いですね。
整理しましょう。

普通に考えるとこうです。

CakePHP3
  confing/bootstrup.phpに定義
PHP
   php.iniに定義
MySQL
    my.cnfに定義

ですが、MySqlに注意点が。
データ型によって挙動が異なります。

datetime     timezoneの設定に従う
timestamp   必ずUTCになる。

気をつけましょう!

CakePHP3でのcomposerの使い方

CakrPHP3インストールされていることが前提。
・プロジェクトが作成されている
・DBと接続ができている。
・ブラウザアクセスし、Get the Ovens Readyが表示されている

CakePHP3インストールディレクトリに移動。
composer.jsonに必要なものを追記。

例えば、
“require”: {
“php”: “5.6.*”,
“cakephp/cakephp”: “~3.2”,
“mobiledetect/mobiledetectlib”: “2.*”,
“cakephp/migrations”: “~1.0”,
“cakephp/plugin-installer”: “*”,
“mailgun/mailgun-php”: “*”,
“guzzlehttp/psr7”: “^1.3”,
“psr/http-message”: “^1.0”,
“php-http/discovery”: “^1.0”,
“psr/http-message-implementation”: “*”,
“php-http/guzzle6-adapter”: “*”,
},

そしてたとえばこれにfacebookを入れたいときは、上記のrequireを追記
“facebook/graph-sdk” : “^5.3”

入れるとこうなる。
“require”: {
“php”: “5.6.*”,
“cakephp/cakephp”: “~3.2”,
“mobiledetect/mobiledetectlib”: “2.*”,
“cakephp/migrations”: “~1.0”,
“cakephp/plugin-installer”: “*”,
“mailgun/mailgun-php”: “*”,
“guzzlehttp/psr7”: “^1.3”,
“psr/http-message”: “^1.0”,
“php-http/discovery”: “^1.0”,
“psr/http-message-implementation”: “*”,
“php-http/guzzle6-adapter”: “*”,
“facebook/graph-sdk” : “^5.3”
},

そして、反映するためのコマンドを打つ。
composer update facebook/graph-sdk
(または、php composer.phar update facebook/graph-sdk)

すると、こんな感じで完了する。

[user@localhost cakephp3]# composer update facebook/graph-sdk
Running composer as root/super user is highly discouraged as packages, plugins and scripts cannot always be trusted
Loading composer repositories with package information
Updating dependencies (including require-dev)

– Installing facebook/graph-sdk (5.3.1)
Downloading: 100%

Generating autoload files

CakePHP3にてPagenationしたデータをコントローラ内で覗き見る

Viewで使う変数名を、仮に「infoDatas」とした時に、それを生成した結果にて、Viewで使うデータを参照することが可能。
こんな感じ。ポイントは「viewVars」ここにほしいデータが入っている。

$infoDatas = $datas->viewVars[‘infoDatas’];

現在のページ番号と、limit数で表示対象のデータを算出することは可能ですが、めんどくさいので便利。
例えば、idにひもづいた画像ファイルが別管理になっている時とかに、それを引き当てたい時とかに便利。
特に画像ファイルだと、サイズがでかいので、全データ持っておくことはできないので、表示分だけ取得したい、とかあるので。

//表示テキストデータの準備
$works = TableRegistry::get('WorkEntries');
$datas = $this->set('infoDatas', $this->paginate(
                        $works->find()->
                        where(['hoge_id' => $_GET['hoge_id']])->
                        order(['hage' => 'ASC'])
                     )
               );
//表示画像の準備
$infoDatas = $datas->viewVars['infoDatas'];
foreach($infoDatas as $info){
    var_dump($info->id);
}

MailgunをCakePHP3で実装

前提として、Mailgunのコンソールでのドメイン認証とか終わっていること。

まず環境設定。

php composer.phar require mailgun/mailgun-php:*
php composer.phar require guzzlehttp/psr7 psr/http-message
php composer.phar require psr/http-message-implementation:*
php composer.phar require php-http/guzzle6-adapter:*

実装

   use Mailgun\Mailgun;
        require 'vendor/autoload.php';
        $url  = 'コンソールで指定されているURL';
        $key  = 'コンソールで指定される値';
        $from = '自分のアドレス';
        $domain = "自分のドメイン";

        $subject = 'タイトル';
        $body    = 'メール本文';
        $email   = '送信先';

        $mgClient = new Mailgun($key);
        $result = $mgClient->sendMessage($domain, array(
                    'from'    => $from,
                    'to'      => $email,
                    'subject' => $subject,
                    'text'    => $body
        ));