• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:更に細分化をしたいのですが。)

Helperクラスを使用したコードの細分化と祝日表示の実装

このQ&Aのポイント
  • Helperクラスを使用して外部classで計算させる方法を紹介します。
  • 祝日が該当する場合に表示するためのcsvファイルを読み込む方法を説明します。
  • これらの方法を使用することで、Viewのコードをより簡潔にすることができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

設計思想の問題なので、いかようにも管理しやすいように切り分ければよいと思います。 例えば、以下のように切り分けるのが良いのではないでしょうか。 ■App\Helpers\SyukuHelper これは、View(Blade)テンプレートで利用するためのいわば窓口である、という考え方。 ■App\Services\HolidayService これを祝日判定用のサービスとして機能させる。 ■で、実装 app/Helpers/SyukuHelper.php <?php namespace App\Helpers; use App\Services\HolidayService; class SyukuHelper { private $holiday; public function __construct() { $this->holiday = new HolidayService(); } public function syuku($d) { $currentDay = date('Y/m/d', $d); $result = $this->holiday->get($currentDay); if ($result !== null) { // 祝日判定だったら、なんかHTMLとか出力する echo '祝日のときのHTML' . $result['name']; } else { echo '平日のときのHTML'; } } } ?> app/Services/HolidayService.php <?php namespace App\Services; use SplFileObject; class HolidayService { private $holidays = []; public function __construct() { // どうせ総なめするし、使いやすいようにコンストラクタで計算結果の配列つくっとく $file = new SplFileObject(storage_path('app/holiday.csv')); $file->setFlags(SplFileObject::READ_CSV); foreach ($file as $line) { if (!isset($line[1])) continue; $date = date('Y/m/d', strtotime($line[0])); $name = $line[1]; $this->holidays[$date] = $name; } } public function get($d) { if (array_key_exists($d, $this->holidays) { // ファイルから作った連想配列のキーに該当の日付があった場合、祝日の名称を返す return ['name' => $this->holidays[$d]]; } else { return null; } } } ?> みたいな感じで切り分けられれば良いと思います。 このような感じにしておけば、View以外で、例えばコントローラなんかで祝日チェックしたい、とか言った場合にも、HolidayServiceだけ呼び出せば使えるわけですね。

iyumoyumo
質問者

お礼

いつも、ご回答ありがとうございます。 多分また、質問をさせていただく事になるかと思いますが よろしくお願い致します。

関連するQ&A