はじめに
Laravelのbladeで、フォームに生年月日入力欄を作ろうとし、「生年月日 select コピペ」で調べてコピペした際、長すぎーと思ったので、 PHPで書き直してから、Laravelのbladeで表示させるところまでやってみました。index.blade.php
//~略
<option value="">-</option>
<option value="1900">1900</option>
<option value="1901">1901</option>
<option value="1902">1902</option>
<option value="1903">1903</option>
<option value="1904">1904</option>
<option value="1905">1905</option>
<option value="1906">1906</option>
<option value="1907">1907</option>
<option value="1908">1908</option>
<option value="1909">1909</option>
<option value="1910">1910</option>
<option value="1911">1911</option>
<option value="1912">1912</option>
//略)2021まで続く...
//...長い。
まずは生PHPでテスト
後ほど、自作関数としてbladeに表示させるつもりだったので、function内に処理を書いて、呼び出すようにしました。 postで受け取った後に年と月と日を連結してdate型にしたかったので、月と日はvalue値を`str_pad()`で0埋めにしました。 →★コメントより、`sprintf`の方がより楽という意見をいただきましたので、変更しました。よりスマートになりました。有難うございます。test.php
<?php
//年
function yearSelect(){
    $n = date("Y"); //現在の年
    $y = $n - 125; //125年前からスタート
    for($y; $y<$n; $y++){
        echo '<option value="'.$y.'">'.$y.'</option>';
    }
}
//月
function monthSelect(){
     for($m=1; $m<=12; $m++){
         $pad = sprintf('%02d', $m) 
         //1~9までは前を0埋め,str_pad($m, 2 ,0, STR_PAD_LEFT)から変更
         echo '<option value="'.$pad.'">'.$m.'</option>';
     }
}
//日
 function daySelect(){
      for($d=1; $d<=31; $d++){
         $pad = sprintf('%02d', $d);
         //1~9までは前を0埋め,str_pad($d, 2 ,0, STR_PAD_LEFT)から変更
         echo '<option value="'.$pad.'">'.$d.'</option>';
      }
  }
?>
<!--略-->
<div>
  <select name="birthday_year">
      <option value="">-</option>
      <?php yearSelect(); ?>
  </select>
  年
  <select name="birthday_month">
      <option value="">-</option>    
      <?php monthSelect(); ?>
  </select>
  月
  <select name="birthday_day">
       <option value="">-</option>    
       <?php daySelect(); ?>
  </select>
  日
</div>
<!--略-->
 できたので、Laravelでやってみます。
できたので、Laravelでやってみます。
【Laravel】自作関数用のクラスを作成
appディレクトリに、Lib(任意名)ディレクトリを作成し、MyFunction.php(任意名)を作成 MyFunctionクラスの中にstaticメソッドを作成していきます。(先程のをstaticにしてぶち込んだだけです。) staticの解説としては以下が分かりやすかったです。有難うございます。 https://fresh-engineer.hatenablog.com/entry/2018/08/23/031829app>MyFunction.php
<?php
namespace App\Lib;
class MyFunction
{
  public static function yearSelect(){
      $n = date("Y"); //現在の年
      $y = $n - 125; //125年前からスタート
      for($y; $y<$n; $y++){
          echo '<option value="'.$y.'">'.$y.'</option>';
      }
  }
  public static function monthSelect(){
      for($m=1; $m<=12; $m++){
         $pad = sprintf('%02d', $m) 
         //1~9までは前を0埋め,str_pad($m, 2 ,0, STR_PAD_LEFT)から変更
         echo '<option value="'.$pad.'">'.$m.'</option>';
      }
  }
  public static function daySelect(){
      for($d=1; $d<=31; $d++){
         $pad = sprintf('%02d', $d);
         //1~9までは前を0埋め,str_pad($d, 2 ,0, STR_PAD_LEFT)から変更
         echo '<option value="'.$pad.'">'.$d.'</option>';
      }
  }
}
【Laravel】エイリアスに登録
configディレクトリのapp.php内にあるエイリアス(aliases)の中に 'クラス名' => App\Lib\ファイル名::class,を追加しますconfig>app.php
'aliases' => [
        //~略
        'MyFunction' => App\Lib\MyFunction::class,
],
【Laravel】bladeで使用する
{{ MyFunction::関数(メソッド)名 }}
index.blade.php
<!--略-->
<li class="form-item">
   <p class="form-item-title">生年月日</p>
   <select name="birthday_year">
     <option value="">-</option>
     {{ MyFunction::yearSelect() }}
   </select>
   年
   <select name="birthday_year">
     <option value="">-</option>
     {{ MyFunction::monthSelect() }}
   </select>
   月
   <select name="birthday_year">
     <option value="">-</option>
     {{ MyFunction::daySelect() }}
   </select>
   日
</li>
<!--略-->
 
無事表示されました。おしまい。