CodeLab技術ブログ

プログラミング技術まとめ

[CakePHP3]slugを使わない

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での扱いになってます。

スポンサードリンク

コメントは受け付けていません。