CakePHP3:コントローラで発行されたクエリをログする

debugkitを入れていればSQLは確認できますが、リダイレクト等が入っていて確認できない場合があります。 その対策です。

bootstrap.phpの変更

bootstrap.phpにこれを追加します:

Log::config('queries', [
    'className' => 'File',
    'path'      => LOGS,
    'file'      => 'queries.log',
    'scopes'    => ['queriesLog']
]);

【重用】デバッグモードの無効化

デバッグモードを無効にします(なぜこれをやらねばならないのか、理解に苦しみますが…)

ロギング用のコードの追加

コントローラで:

use Cake\Datasource\ConnectionManager;

を追加し、かつ、ログしたいクエリの周りに:

$connection = ConnectionManager::get('default');
$connection->logQueries(true);
 $this->Orders->save($order);
$connection->logQueries(false);

といった具合にlogQueriesを入れます。

Datasourcesについて

なお、app.phpのDatasourcesの中のlogfalseのままでOKです。

注意点

UPDATE前と後の値に変更がない場合、UPDATEは発行されないようです(したがってログにも出ない)

Git:ブランチを削除する

ローカルの場合

ローカルブランチ一覧を表示

git branch

マージ済みのローカルブランチを削除

git branch -d ブランチ名

マージ済みか否かを問わないで、ローカルブランチを削除

git branch -D ブランチ名

リモートの場合

リモートブランチ一覧を表示

git branch --remote

リモートブランチの削除

git push origin --delete ブランチ名

Vue:Invalid Host Header

vue-cliを使ってこちらのチャットプログラムを作ってみたのですが、ローカルホスト外からアクセスするとInvalid Host Headerというエラーがでる。対処方法ですが、ルートディレクトリに以下の内容のvue.config.jsを作ると解消します:

module.exports = {
  devServer: {
    host: '0.0.0.0',
    disableHostCheck: true
  }
}

Vue.js:フォーカスの当たっている要素のIDを取得する

こんな感じでいけます:

created: function() {
    // ブラウザ以外で実行の場合、documentが無いと怒られるための確認
    if(typeof window !== 'undefined') {
        // フォーカスが変わったらfocusChanged関数を呼ぶ
        document.addEventListener('focusin', this.focusChanged);
    }
},
beforeDestroy: function() {
    if(typeof window !== 'undefined') {
        document.removeEventListener('focusin', this.focusChanged);
    }
},
data: function () {
    return {
        idOfFocus: ''
    };
},
methods: {
    focusChanged: function(event) {
        this.idOfFocus = event.target.id;
    },
}

Vue.js:配列の中のオブジェクトの値をリアクティブに変更

こんな感じにVue.setを用います:

<div id='app'>
  <ul>
    <li v-for="artist in artists">{{artists.firstname}} {{artists.lastname}} {{artists.age}}</li>
  </ul>
  <form>
    <input type="button" value="年齢を5際、若くする" v-on:click="reduceAge"/>
  </form>
</div>
var app = new Vue({
  el: '#app',
  data: {
    artists: [
      { lastname: 'セザンヌ', firstname: 'ポール', age: 67 },
      { lastname: 'マティス', firstname: 'アンリ', age: 84 },
    ]
  },
  computed: {
  },
  methods: {
    reduceAge: function() {
      for(i=0,j=this.artists.length; i<j; i++){
        originalAge = this.artists[i].age;
        reducedAge  = originalAge - 5;
        Vue.set(this.artists[i], 'age', reducedAge);
      }
    }
  }
});