ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

CakePHP3系のController内で関数を定義してガンガン使っていく方法

こんにちは!
ユアマイスターエンジニアインターンの高梨です!

では、前置きなしで早速始めていきます!

今回の概要

  • Cakephp3系のController内で自分で好きな関数を定義する。
  • 定義した関数をガンガン使っていく。

内容

例えば、記事とランキングを取得するための
こんなコードがあるとします!

class ArticlesController extends AppController
{
  public function index()
  {
    //記事を全て取得
    $articles = $this->Articles->find('all');
    $this->set(compact('articles');

    //色々処理してランキング取得
    $ranking = ・・・
    $this->set(compact('ranking'));
    
  }

  public function detail($id)
  {
    //idから1記事取得
    $article = $this->Aritlces->get($id);
    $this->set(compact('article'));

    //色々処理してランキング取得
    $ranking = ・・・
    $this->set(compact('ranking'));

  }

}


この時、ランキングを取得する処理が完全に同じ
コードになっていますね!

これを切り出して
1つの関数を作るやり方が
こちらになります。

class ArticlesController extends AppController
{
  public function index()
  {
    //記事を全て取得
    $articles = $this->Articles->find('all');
    $this->set(compact('articles');

    //ランキングをセット
    $this->setRanking();
    
  }

  public function detail($id)
  {
    //idから1記事取得
    $article = $this->Aritlces->get($id);
    $this->set(compact('article'));

    //ランキングをセット
    $this->setRanking();

  }
 
 //今回作った、ランキングをセットする関数
  private function setRanking()
  {
   //色々処理してランキング取得
    $ranking = ・・・

    $this->set(compact('ranking'));
  }

}



これがController内で
関数を定義し、
実際に使うやり方です。

もちろん引数を与えてあげることも可能ですし、
returnで値を返すことも可能です!

同じコードを何回も書くのは好ましくないので、
こんな感じで外側に切り出して使うようにしましょう!

この方が後々修正もやりやすいですし、
同じコードをまとめておくことで
他の人も見やすいですからね!

では、今回は以上です!
ご覧いただきありがとうございました。



※privateについて補足

publicは外部からアクセス可能なメソッドで、
privateはclass内からしかアクセスできないものです。

ここでいう、indexアクションとかは
外部からアクセスする必要があるので、
publicにしておきます。

逆にsetRankingは外部からアクセスする必要がないので、
また、してほしくないので、
privateにしていますね。

ここでは簡単な説明にとどめておきます!
では、また次回。