いつも忘れてしまうので…
if ($this->Articles->save($article)) { }else{ $this->log(print_r($article->errors(),true),LOG_DEBUG); }
いつも忘れてしまうので…
if ($this->Articles->save($article)) { }else{ $this->log(print_r($article->errors(),true),LOG_DEBUG); }
ファイルをアップロードしたりgitにいれたときに、壊れてないかの確認に使いたかったのでいれました。
brew install md5sha1sum
これでmd5sum
を使えるようになりました。
自分の開発はgitで行っているけど、お客様のレポジトリがsvnというケースが少なからずあります(私の場合)
gitからcloneしてsvnにimportするまでの手順は、実行頻度が少なくていつもてこずるのでここにメモします。
以下の例はCakePHP3での例ですが、ignore周り以外は流用できます:
cd /var/www/html git clone https://xxxx ./app
git clone
した直後なのでリポジトリ管理したくないファイルは存在しないと思ったのですが.git
の中とかは管理対象外にしたいですよね。よってこのステップを実施します。なぜ先に削除するかというと、svnに登録したファイルを後からsvn管理外にするのは面倒だからです。
cd /var/www/html/app rm -f tmp/* rm -f tmp/cache/models/* rm -f tmp/cache/persistent/* rm -f tmp/cache/views/* rm -f tmp/sessions/* rm -f tmp/tests/* rm -f logs/* rm -rf vendor/* rm -rf ./.git rm -rf ./.github
cd /var/www/html/app svn import . svn://リポジトリのURL -m "initial import"
不便なんですが、importしただけでは手元のソースがワーキングコピーになりません。
cd /var/www/html mv app app_bak
cd /var/www/html svn co svn://リポジトリのURL ./app
gitは.gitignoreがあり、便利ですが、svnの場合はプロパティの設定でignoreします:
cd /var/www/html/app svn propset svn:ignore "*" tmp svn propset svn:ignore "*" tmp/cache/models svn propset svn:ignore "*" tmp/cache/persistent svn propset svn:ignore "*" tmp/cache/views svn propset svn:ignore "*" logs svn propset svn:ignore "*" vendor svn status
svn commit -m "apply ignore properties"
以上です
Composerを使ってCakePHPをインストールすると、logとかtmpディレクトリを適宜作って、かつ、パーミッションを設定してくれます。 これまでは、アプリケーション独自のディレクトリを作る場合に手動でスクリプトを叩いていたのですが、面倒かつ、抜けがでるので Composerにやらせることにしました。
やり方は簡単で、composer.jsonに次の記載をするだけです:
"scripts": { "post-install-cmd": [ "mkdir -p ./data/uploads; chmod 777 ./data/uploads", "App\\Console\\Installer::postInstall" ],
App\\Console\\Installer::postInstall
は最初から入っていて、tmpやらlogやらを作ってくれます。
その上の行でdata/uploadsディレクトリを作成し、パーミッションを設定しています。
実は恥ずかしながら、これまでjsをデバッグする際にconsole.logに出力したりalertで表示したりしていました。 本日購入した「Javascript本格入門」ではChromeのデベロッパーツールを使って のデバッグ方法が書いてあったので試してみました。
Stackoverflowにわかりやすい説明があったので記載します:
ステップインは、現在の行にメソッドコールがある場合、そのメソッドの中に移動します。もし、複数のメソッドが呼ばれている場合は実行順に移動します。メソッドコールが無い場合はステップオーバーと同じです。ステップインは、インタープリターがソースを1行1行実行するのを追うのに似ています。
ステップオーバーは現在のスコープの次の行に移ります。しかしその際、メソッドコールがあった場合、メソッドを実行しますがデバッガの位置がメソッドの中に移動しません。ステップオーバーは特定のメソッドのロジックを追いたいが、中身の細かな点については興味がない場合に利用します。ステップオーバーはどの時点において期待している条件への違反が発生したかを追うのに便利です。
ステップアウトは次のreturn
もしくはreturn
相当まで進みます。つまり、制御が前のスタックに戻るまでです。
ステップアウトは現時点・現在のメソッドでの調査が終わり、値が利用されているスタックの元の場所に戻るのに利用します。
仮に以下のコードがあり、main
からbar
が呼ばれ、
現在、関数bar
の1行目を実行中だとする:
function main() { val s = foo(); bar(s); } function foo() { return "hi"; } function bar(s) { val t = s + foo(); // デバッガにおける現在の位置 return t; }
デバッガの位置はfoo
関数の1行目、つまりreturn "hi"
と書いてある行に移ります。
次にステップアウトをすると、デバッガの位置はfoo
の呼び出し元の次の行である
bar
関数の2行目(return t
の場所)に移ります。
デバッガの位置はbar
関数の次の行、つまりreturn t
に移ります。
次にステップアウトすると、デバッガの位置はmain
関数の最後の行に移ります。
CakePHP3.5で、カラム追加したにも関わらずそのカラムのデータがINSERT/UPDATEされない現象に出くわしました。 tmp以下をクリアしても解消しない…
対策ですが、Entityの編集が必要でした:
protected $_accessible = [ 'id' => false, <中略> '新しいカラム' => true
(*ですべてのカラムをtrueにしている場合は対策が不要です)