はじめに
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】自作関数用のクラスを作成
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>
<!--略-->
無事表示されました。おしまい。