CakePHP3のチュートリアルを見てみたんだけど、ページ遷移のURLがちょっと今までのものと違う。
今までは、ユニークIDでレコードの指定していたが、slug(スラグ)という仕組みでチュートリアルを説明している。
例えば、ブログなどで、タイトルをURL含めるものがあるが、そういった場合の仕組みです。
まぁ、それはそれでいいんだけど、この実装だと、日本語がダメなんですよね。
Text::slug()でスラグを生成しているんだけど、日本語を入れるとローマ字に変換されちゃうので、はっきり言って使い物にならない。
一応、URLエンコードすればURLに日本語が入ってても問題ないはずなので、そっちの方が良いのかもしれない。
あと、タイトルをスラグに設定していて、タイトルがかぶったらどうするんだという問題もあり。(チュートリアルだと重複しているからダメとエラーメッセージが出ました)
また、チュートリアルのコードだと、タイトルを編集してもslugが変わらないので、URLとタイトルがちぐはぐになっちゃいます。
モデルのテーブルでbeforeSave()の箇所でslugを入れているんですが、新規の場合のみスラグを変更していますが、ここの条件分岐をなくしちゃえばこの問題は解決しますが、URLが変わっちゃうっていうのはどうなんだろうねぇ。
因みに、今までのようにIDで管理する方法もあります。
templateのリンクを出している部分で$article->slug となっているところを$article->id として、findBySlug()でレコードを呼び出しているところをfindById()としてフィールドを変えてあげればOK。
public function view($id= null) { $article = $this->Articles->findById($id)->contain('Tags')->firstOrFail(); $this->set(compact('article')); }
因みに、bakeで吐かれるコードは今まで通りIDでの扱いになってます。