Web技術:
#JavaScriptを学ぶ
#PHPでコーディング
#cakephpのメモ
#データベースのメモ
#ブラウザの知識
#ブラウザの自動操作
開発の基盤技術(Gitなど):
#Markdown記法を覚えよう
#文字コードの知識

#cakephpのメモ 21
chmod -R 777 tmp
をしてあるのに
「cacheフォルダに書き込む
パーミッションが無い」
というエラーが消えない場合
原因は?
Linux OS上で
getenforce
して状態を確認。
setenforce 0
すれば解決。
この現象は,
サーバが再起動した直後に起こりやすい。
#cakephpのメモ 20
CakePHPからgmailでメール送信 (4)
cake側からメール送信処理を実行すると
受信側では初回は
「迷惑メール」フォルダ内にメールが届く。
「Gmailでは,このメールが本当に~から送られたものであることを確認できませんでした。」
→迷惑メールでないことを報告すればOK。
#cakephpのメモ 19
CakePHPからgmailでメール送信 (3)
コントローラ内で
use Cake¥Mailer¥Email;
(new Email('default'))
->setFrom(['送信者@ gmail.com' => '送信者名'])
->setTo('送り先@ gmail.com')
->setSubject('タイトル')
->send('本文¥n¥n改行');
#cakephpのメモ 18
CakePHPからgmailでメール送信 (2)
config/app.phpで
'EmailTransport' => [
'default' => [
…
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => "めあど@ gmail.com",
'password' => "XXXXXXXX",
'transport' => "smtp",
'tls' => null, …
#cakephpのメモ 17
CakePHPからgmailでメール送信 (1)
gmail側の設定
gmailをPCのブラウザで開き
右上のアイコン
→「Google アカウントを管理」
→左サイドバーの「セキュリティ」
→「安全性の低いアプリのアクセス」をONにする。
#cakephpのメモ 16
src/Shell内のシェルクラスでは…
・$this->loadModel('モデル名') によって
Modelクラスを呼び出し,DB操作できる。
・日時出力
echo ( new ¥DateTime() )->format('Y-m-d H:i:s');
DateTimeの前に
名前空間を指す¥が要る点に注意。
#cakephpのメモ 15
コマンドラインから
シェルクラスを起動する際,
引数を渡せる。
CUIから
bin/cake hoge_fuga 123
class HogeFugaShell extends Shell
{
public function main(){
// シェル起動引数の文字列
$arg0 = isset( $this->args[0] ) ? $this->args[0] : null;
→"123"
#cakephpのメモ 14
crontab -e
# 分・時・日・月・曜日・コマンド
# 毎時毎分にログ出力する
* * * * * /var/www/html/(ドメイン名)/public/cake/bin/cake hoge_fuga >> /home/root/cron.log
これで,src/Shell 内の
HogeFugaShell.php内のmainメソッドが
CRONジョブとして実行される。
#cakephpのメモ 13
CRONジョブや
CUIで動くアプリを作る手順 (2)
src/Shell 内に
HogeFugaShell.php で
class HogeFugaShell を定義し,
main メソッドを書いたら…
cakeのプロジェクトフォルダ上で
bin/cake hoge_fuga
というコマンドを実行すると
CUIで main メソッドが実行される。
#cakephpのメモ 12
CRONジョブや
CUIで動くアプリを作る手順 (1)
src/Shell 内に
HogeFugaShell.php
namespace App¥Shell;
use Cake¥Console¥Shell;
// 動作テスト用のバッチ
class HogeFugaShell extends Shell
{
public function main(){
echo "Hello, World!";
}
}
#cakephpのメモ 11
部分的なテンプレートを
エレメントという位置づけで使いまわせる。
src/Template/Element/_hoge.ctp
他のctp内から呼び出し
echo $this->element('_hoge', [
"fuga" => 1
]);
→ エレメント内で $fuga という変数を使える。
#cakephpのメモ 10
CakePHP×MySQLで
datetime型のカラムの日時情報を
秒まで表示したいとき,
工夫が必要。
https://blog.s-giken.net/427.h...
ORMからの検索結果に対し
$record->created->i18nFormat("yyyy/MM/dd HH:mm:ss")
これで秒まで表示できる。
DateTime()やstrtotime()だと
秒が0になる。
ORMで検索条件を指定する際,
不等式による範囲指定
https://www.ritolab.com/entry/...
where([
"カラム名 >=" => 1,
"カラム名 <=" => 10
])
のように書く。
日時の範囲指定・比較も同様で
=> の右側に文字列で
"2020-01-01 00:00:00" などを渡す。
SQL文中の "?" に
型を指定して値をbindできる
$conn = ConnectionManager::get('default');
$statement_obj = $conn->prepare($sql);
$statement_obj->bind(["hoge", 1], ["string", "integer"]);
$statement_obj->execute();
$rows = $statement_obj->fetchAll('assoc');
use Cake\Datasource\ConnectionManager;
$sql = <<<EOS
~素のSQL~
EOS;
// SQL実行結果を配列で取得
$conn = ConnectionManager::get('default');
$statement_obj = $conn->prepare($sql);
$statement_obj->execute();
$rows = $statement_obj->fetchAll('assoc');
「ORMで美しく簡潔に書くぞ!」
↓
1レコード=1オブジェクト
記法は$hoge→fuga
↓
その後
「検索条件が肥大化し
ORMメソッドで表現できなくなった…
↓
複雑なSQLを素で書く
↓
1レコード=1連想配列となり
$hoge→fugaを全部
$hoge["fuga"]に書き換えなければならなくなる
モデルクラス内で
新規インスタンスを生成して
DB保存するには…
// 新規
$record = $this->newEntity();
// カラムに値をセット
$record->hoge = "boo";
$record->fuga = 1;
…
// 保存
$this->save( $record );
saveがインスタンスメソッドじゃないの気持ち悪いよね