CakePHPで現在のクラス名を取得すると単数形になっている、しかしこれを複数形に変換しないとViewでコントローラーを指定できないので

CakePHPを使っていて、View側でメソッド名やコントロール名を取得して処理をしたいという場面が出てきた。取得そのものは$this->actionや$this->nameでそれぞれ取得が可能なのだが、$this->Html->url()で指定するコントローラー名は複数形で指定する必要があるらしく、しかし$this->nameで得られるのは単数形の状態。「複数形は単純に後ろにsをつけましょう」などといった中学英語の初歩では通用するはずもなく、さりとて自分で複数形データーベースを作って変換関数を用意するなんて気が遠い……。いや、そもそもCakePHPではそれを処理しているんだから絶対に関連した関数なりメソッドが提供されているに違いない、と思ってマニュアルを紐解くと、やはりあった。


CakePHPの内部処理で単数形を複数形にしたりその逆を処理したり、キャメル記法とアンダーバー記法の変換をしたりしている以上、そのメソッドは必ず持っている、と考える方が自然だと思う。

ということでマニュアルをつらつら探して見たら、Inflectorクラスというのが存在した。
どうやらこれが、複数形/単数形変換などを担うクラスのようだ。

■Inflector — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-utility-libraries/inflector.html

使い方はごく単純で、単にメソッドの引数に変換したい単語文字列を指定するだけ。返り値で変換後の単語文字列がやってくる、という使い方である。

Inflectorクラス内の、これらの変換系のメソッドはすべてstaticで宣言されているので、いちいちインスタンスを生成する必要はなく、$var = Inflector::pluralize(‘apple’)のように指定すれば、変数$varには「apples」という文字列が代入されていると期待できる。

CakePHP2 実践入門 (WEB+DB PRESS plus)Webアプリ開発を加速する CakePHP2定番レシピ119はじめてのCakePHP (I・O BOOKS)WebデザイナーのためのCakePHPビューコーディング入門詳解CakePHP辞典―2.0/2.1/2.2/2.3対応PHPエンジニア養成読本 〔現場で役立つイマドキ開発ノウハウ満載! 〕 (Software Design plus)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください