週末IT

IT初心者が学んだこと思ったこと考えたことのまとめ

カテゴリ:PHP > CakePHP

CakePHP3でログインチェック


CakePHP2まではController内で
if ($this->Auth->loggedIn()) {
    // ログイン
} else {
    // 非ログイン
}
で判定できていたが、CakePHP3ではloggedIn()メソッドがなくなっている。

公式ドキュメントの40pによれば、$this->Auth->user()でチェックすれば良いとのこと。
if ($this->Auth->user()) {
    // ログイン
} else {
    // 非ログイン
}

これでOK.

CakePHP3ではSessionComponentが廃止され、Controller内から$this->Sessionを使うことができなくなった。
代わりに$this->request->session()を使用するのだが、毎回$this->request->session()->read('Hoge.hoge');などとしていると面倒なので、すべてのController内から$this->Sessionでセッションを利用できるようにする。

1-1. AppControllerで$this->Sessionを用意する
1-2. Controllerから$this->Sessionを利用する続きを読む

CakePHPでよく現れる配列 
$array = array (
	0 => array (
		'Model' => array (
			'field1' => 'value1',
			'field2' => 'value2',
			,
            ,
		)
	),
	1 => array (
		'Model' => array (
			'field1' => 'value1',
			'field2' => 'value2',
			,
            ,
		)
	),
    ,
    ,
)

この配列の任意のフィールドでソートする方法。
Model->findなどでとってきた配列を後からソートしたい場合に使用する。

 続きを読む

ユーザーやパスワードなどの設定は共通かつ使用データベースのみ変更したい場合、例えば日時によりデータベースを切り替えたい場合や、ローカルと別サーバーでのデータベース切り替えなどへの対処。
database.phpにいくつも似たような設定を用意するのは嫌だったので、使用する設定は1つとし、データベースのみ切り替える。

AppModel.php内での切り替え

使用するすべてのモデルのデータベースを一律で切り替えたかったため、AppModel.phpのコンストラクタ内で切り替えを実装。

class AppModel extends Model{

    public function __construct($id = null, $table = null, $ds = null) {

        // データソースへの参照を取得
        $dbSource = ConnectionManager::getDataSource ($this->useDbConfig);

        // ローカル環境かどうかでデータベース名の切り替え
        if ($_SERVER ['REMOTE_ADDR'] == '127.0.0.1') {
                $dbName = 'local_db';
        } else {
                $dbName = 'another_db';
        }

        // データベース名の書き換え
        $dbSource->config ['database'] = $dbName;

        parent::__construct ($id, $table, $ds);

    }

}

これで使用データベースの切り替えができた。

うまく動かない

(cakephp-2.4.10 or cakephp-2.5.2にて)
他のブログを参照しながらCakeEmailでgmailの設定をしたところ、うまく動かなかったので自分の環境の場合の対処法。
まず、cakeemail gmail などでググるとはじめの方に出てくる、
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'username@gmail.com', // ユーザ名
        'password' => 'password',           // パスワード
        'transport' => 'Smtp',
        'tls' => true
    );
という設定だが、ドキュメントによると、これはcakephp-2.3.0用の書き方のようだ。
この書き方をしてしまうと
SMTP server did not accept the connection or trying to connect to non TLS SMTP server using TLS.
で引っかかる。

続きを読む

このページのトップヘ