コントローラーからview⇒helperへ値渡し
Index.blade.phpを当月として、前月をlast.blade.php,次月をnext.blade.phpとして各1ヶ月分の勤務状況を表示しています。
Index.blade.phpを以前、教えていただいた通りHelper.phpとService.phpに切り出してIndex.blade.phpを軽くすることは出来ました。
last.balde.phpとnext.blade.phpも基本的には同じ作りにしたいと思っています。
処理をしている時点を起点にして、次月、前月に遷移する作りにしています。
Index.blade.php内で下記のコードを記載してlastとnextに$ymと$lastmonthを渡しています。
<a href="{{ route('user.last',['ym'=>$ym,'lastmonth'=>$lastmonth]) }}"><<先月</a>
<a href="{{ route('user.next',['ym'=>$ym,'nextmonth'=>$nextmonth]) }}">次月>></a>
(今回の問題)
last.blade.phpをhelperとserviceに切り分けていないときは$ymと$lastmonthのデータ渡しが出来たのですが切り分けた途端$lasymonthと$ymと$mが認識出来ません。
エラ〜は例えば、lastmonthがundefinedみたいなエラ〜となります。
indexとlastのコントロラーは下記の通りです。
Controller一部抜粋
public function index(Request $request){
{
$user= $request->user();
}
$dt=Carbon::now();
$ym=$dt->format('Ym');
$lastm=$dt->subMonths(1);
$nextm=$dt->addMonths(1);
$lastmonth=$lastm->format('Ym');
$nextmonth=$nextm->format('Ym');
$tm=$dt->month;
$ty=$dt->year;
setlocale(LC_ALL, 'ja_JP.UTF-8');
$youbi=$dt->formatLocalized('%a');
$this_month_days=$dt->daysInMonth;
$e_all = Kintai::where('user_id',Auth::user()->user_id)->get();
foreach ($e_all as $e_time) {
}
} return view('user.index',compact('e_all','user','point_actions','point_count','paterns','e_users','ym','lastmonth','nextmonth','tm','ty','this_month_days','const_rest_t'));
}
public function last(Request $request)
{
$e_all = Kintai::all();
$ym = $request->ym;
$lastmonth = date("Ym",strtotime($ym."01"." -1 month "));
$nextmonth = date("Ym",strtotime($ym."01"." +1 month "));
$ly = date('Y',strtotime($ym.$lastmonth));
$m = date("n",strtotime($ym.$lastmonth));
return view('user.last',compact('lastmonth','e_all','ly','m','ym','nextmonth','paterns','e_users','point_count'));
}
(ここまでソース)
因みに上記の方法でlast.balde.php内で
<?php
$ym=$lastmonth;
echo $lastmonth;
$lastmonth = date("Ym",strtotime($ym."01"." -1 month "));
$nextmonth = date("Ym",strtotime($ym."01"." +1 month "));
$m = date("n",strtotime($ym.$lastmonth));
$ly = date('Y',strtotime($ym.$lastmonth));
echo'<head>'.$ly."年".$m."月".'</head>';
としたときは受け取れるのですが
上記部分を含めた部分をhelperに移そうとしたらundefinedになります。
因みにindex.blade.phpでは下記のようにしていて上手くいっていますがlast.bladeでも同じような作りにしたいと思っています。
(Index.blade.php)一部抜粋
@inject('our_helper',\App\Helpers\OurHelper::class)
{{$our_helper->ourLogic($e_all)}}
(OutHelper.php)一部抜粋
public function ourLogic($e_all)
{
$ym=Carbon::now();
$tm = date("n",strtotime($ym));//月
$ty = date("Y",strtotime($ym));//年
$youbi = array("日","月","火","水","木","金","土");
$countdate=date('t', mktime(0, 0, 0, $tm, 1, $ty));
foreach ($e_all as $e_time) {
$e_all_by_day[$e_time->date_time][] = $e_time;
}
for ($i = 0; $i < $countdate; ++$i) {
$d = mktime(0, 0, 0, $tm, 16 + $i, $ty);
(達成したいこと)
当月を$ym,次月を$lastmonth,$mを月、$lyを年としてhelperに渡したいです。
(試みたこと)
Helperを別に作ってLastHelperとしてlast.blade.phpからLastHelperとした。
@inject(‘last_helper',\App\Helpers\LastHelper::class)
{{$last_helper->LatLogic($e_all)}}
public function lastLogic($e_all)
{
$dt=Carbon::now();
$ym=$dt->format('Ym');
$lastmonth = date("Ym",strtotime($ym."01"." -1 month "));
$nextmonth = date("Ym",strtotime($ym."01"." +1 month "));
$m = date("n",strtotime($ym.$lastmonth));
$ly = date('Y',strtotime($ym.$lastmonth));
(結果)
ymとmがundefinedとなります。
何度もすみませんがご教授の程よろしくお願い致します。
お礼
またまたご回答頂きありがとうございます!! 超有力な回答を頂き大変感激しております。 >// 再来年の2月(閏年) >var_dump(date('t', strtotime('+24 month'))); これには気づきませんでしたね~。さすがです! 確かに、今月は2月ですから最善手ですね(笑) また、checkdate関数なんて便利なのあったのですね! date('X')内に指定するXくらいの知識しかなかったものでw さらに日の出日の入り時刻まであるとは知りませんでした。 それなら春分、秋分の日もあるかもと一瞬思いました。 また、サイト制作でこだわったところ、 ページ見ましたけど、こんな仕様に頭抱えるのかww かなり爆笑しました(笑) でも確かに、日の出日の入り時刻なんてこれがなければ、 計算は複雑怪奇になりそうですね。 どうもありがとうございました。