一人もくもく会 α verでサービス開始しました。

CakePHP

一人もくもく会をCakePHP3のみに変更

Angular + CakePHP3 で作成していた 一人もくもく会 だが、Angularを捨ててCakePHPのみに修正した。 お客さんのために作成したサイトでも何でもないのでSEO対策とかどうでも良かったのでAngularを入れて試したのだが、 そもそもGoogleボットがレンダリングし…

werckerでCakePHP3のカバレッジ

CakePHP3でwerckerのCIを設定している。 カバレッジも表示したいのだが、BitBucketのプライベートリポジトリは無料でカバレッジを表示できるサービスが多分無い。 そのため別途解決策として、 出力したカバレッジhtmlを他の適当にレンタルしているサーバーな…

CakePHP3プロジェクトをwerckerで無料CI

werckerにて、CakePHP3プロジェクトの無料CI設定をしたログ。 良いDockerイメージがなくwercker-laravel5を参考に作成したので、 基本的には下記に書いてあることそのままで設定可能。 https://hub.docker.com/r/dala00/wercker-cakephp3/ DBのホスト名とポ…

Angular2とCakePHP3を共存させる

AngularとCakePHPを共存、つまり同じホスト名で動作させたい場合。 例えば下記のように隣同士で並んでいるとする。 Angularはビルドしたdistフォルダのみの公開でその他のソースはアップなどはしない場合。 app dist 公開フォルダはAngular側のdistフォルダ…

一人もくもく会というサービスを作成

一人もくもく会というサービスを作成して公開した。 mokumoku.alphabrend.com 概要 世の中誰でも夜暇な時に適当にプログラミングをあれこれ試す時があると思うが、 そういった時のログを投稿できるサービス。 Qiitaやブログのようにきっちりプログラムや記事…

CodeshipでBitBucketのCakePHP3のCI

BitBucketのCakePHP3プロジェクトのリポジトリをCodeshipで無料CIを試した。 werckerを使おうと思ったのだが適したDockerイメージが無いとダメで、 適当に設定してみようと思ったがうまくいかなかったりして時間の無駄な気がしたので、 試しにCodeshipを使っ…

cakephp/migrationsにプルリクエストを送った

はじめに CakePHP3 Advent Calendar 2016 - Qiita 20日目が空いていたので。 内容 CakePHP3のマイグレーションにはmigration_diffという機能があり、 差分から自動的にマイグレーションファイルを作ってくれる超便利な機能がある。 ただ1点、 afterオプショ…

CakePHP3の優位性を色々

はじめに この記事は下記の1日目としての投稿。 CakePHP3 Advent Calendar 2016 - Qiita 昨今は様々なphpフレームワークがある。Laravelとかは最近流行ったりしていて色々触ってみるが、 自分はやっぱりCakePHP3に帰ってきてしまう。それだけ便利で楽だから…

CakePHP3とLaravel5のマイグレーション比較

phpのフレームワークには大体マイグレーション機能がついている。 業務でアプリケーション開発を行う時は各開発者のローカルの開発環境、サーバー上の開発環境、ステージング環境、本番環境などと分かれていたりするため、 そういった場合はマイグレーション…

CakePHP3でアソシエーションが保存されない

CakePHP3は単なるエンティティの保存もアソシエーションを含む保存も全てsaveメソッドで行う。 しかしなぜかこの関連データが保存されない場合があった。 原因を探ってみるとdirtyが無かったため。 Users hasMany Itemsの場合であれば $user->dirty('items');…

CakePHP3でEmailのfromの共通設定をDBで指定する

CakePHP3はapp.phpにてメール送信のfromのデフォルトを簡単に設定できる。 固定ならそれで問題ないのだが、問題はDBの設定でfromを指定したい場合。 bootstrap.phpを見てみると、app.phpの設定はConfigure::consumeで削り取られており、 あとでConfigure::wr…

CakePHP3のテーブルにprefixを使う方法

CakePHP2まではDB設定でprefixが使用できたのだが、 何故か3になってから設定がなくなっている。 テーブルクラスにそれぞれ設定していくのが普通だが、 bootstrap.phpのuseをたくさんしている箇所に use Cake\Event\EventManager; 末尾に EventManager::inst…

CakePHP3ページネーション時にhead内にSEO対策のlinkタグを挿入する

ページ分けをする際、それらのページは一連の同じページであることを示すために headタグ内に下記のようなタグを挿入する。 下記のような感じ。 <link rel="prev" href="http://www.example.com/article?story=abc&page=1" /> <link rel="next" href="http://www.example.com/article?story=abc&page=3" /> CakePHP2のころからあったようでそちらのマニュアルには書かれているのだが、 下記をheadタグ内に入れておく</link></link>…

Hierselectプラグインの作成

HierselectのjQueryプラグインを作成した。 Hierselectというのは、例えばプルダウンで大、中、小カテゴリを選択する際に、 大カテゴリの選択によって中カテゴリプルダウンの中身を属するもののみに更新し、 さらに中カテゴリの選択によって小カテゴリのプル…

CakePHPとLaravelの使い道

ずっとCakePHPを好んで使ってきたが、Laravelがすごく人気が高いとのことなので使用してみて色々と比較。 情報量 Laravelはドキュメントのどのページを見ても何か説明が足りない気がする。 人のパッケージのソースを見たり検索で情報を探したりしなければな…

CakePHP3のテスト時にBehaviorによるエラー

CakePHP3でテストをする際、突然大量のエラーが発生することがあった。 その直前にやったことといえばBehavior関連のテストの作り込み。 関連するテストが2箇所あるのだが、その両方を実行するとエラーになり、どちらかだけコメントアウトするとエラーが出…

CakePHP3のテスト時にテーブルが見つからない場合

CakePHP3でphpunitを走らせるとテーブルが存在しない旨のエラーが発生。 fixtureもあるしちゃんと設定もしてあるし、なぜ発生するのか不明… という場合。 behaviorのinitializeの中でTableのschemaを取得などしていると、 テーブルをfixtureの設定ではなくim…

CakePHP3のシンプルなアップロードプラグインを作成

CakePHP3用のシンプルなアップロードプラグインを作成した。 GitHub - dala00/cakephp-simple-upload そもそもCakePHP3用のアップロードプラグインは有名なものが存在する。 GitHub - josegonzalez/cakephp-upload: CakePHP3: handle file uploading sans ri…

CakePHP3の多言語対応が正しく動作しない場合

CakePHP3には元々多言語化機能が付いている。 src/Locale/ja/deafult.po に翻訳ファイルを設置しておくのだが、 これが正しく動作しない場合があった。 原因として、このファイルをCakePHPが読み込む際に is_fileでファイルかどうかを取得しているのだが、 …

bindModelによりsaveAllの失敗

bindModelをしたあと、色々リレーションデータをくっつけてsaveAllしようとしたのだが なぜか保存されない。こちらに答えがあった。bindModelは第2引数を指定しないと1つのSQLを実行した後は解除されてしまう。 上記記事とは違いisUniqueはつけていないが…

HABTMの注意事項

CakePHP1.2でloadModelを使ってモデルを用意することがあるが、 その際予期していたクラスでなく、AppModelが入ってくることがある。ひとつの原因として、綴りミスがある。 しかし綴りは合っているのにAppModelになってしまったり、 loadModelする場所によっ…

携帯サイトその2

以前、CakePHPでrender関数をオーバーライドして 自動的に携帯テンプレートを振り分ける方法を紹介した。 それにも関連するが、追加のプログラムを紹介。 function _mb_render() { $this->layout = 'mobile'; $output = $this->render(); $contents = mb_con…

cronを使う

以前、CakePHPにて別の方法でcronを使用する方法を書いていましたが、 バージョン1.2以降はシェル機能が付いているのでそちらを利用する方が正解です。 とりあえず一例だけ載せておきます。vendors/shells/test.php class TestShell extends Shell { var $us…

cakephpのモデル

モデルでreadしてもなぜかアソシエーションしているものが取れなかった。 よくよく調べてみると、モデルのファイル名を間違えて複数形にしていた。 しかしなぜかプログラムはちゃんと動いている。 つまり単純なモデルならばモデルファイルを作らなくても 良…

オリジナルのView

CakePHPではViewにViewというクラスが用いられているが、 これはオーバーライドしたものを利用できる。例えばSmartyViewを作りたい場合、 app/viewsにsmarty.phpという名前のファイルに SmartyViewクラスを作成。 クラスの内容自体は関数をオーバーライドし…

DBコンフィグを動的に追加

こんな感じの関数をモデルに追加。 function addDbConfig( $name, $host, $login, $password, $database ) { $manager =& ConnectionManager::getInstance(); if( empty( $manager->config->{$name} ) ) { $manager->config->{$name} = array( 'driver' => '…

複数形

モデルの名前を設定すると、 自動的にそれを複数形にしたテーブルが参照される。 例えばitem→itemsだし、 category→categoriesになる。 ただsをつけるだけじゃないようにちゃんと設定されている。どこでそういうことをしているのだろうか見てみると、 inflec…

携帯によって表示を変える

まず、cakeのライブラリの中にある app_controller.phpを appフォルダにコピーします。次にrender関数をオーバーライドするため 以下の内容を書き込みます。 function render( $action = null, $layout = null, $file = null ) { if( !empty( $_SERVER["HTTP…