質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

【Laravel】ViewからControllerへ値を渡したい(カレンダーの前月、翌月をボタンで操作)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 249

pararinrinrin

score 10

現在のカレンダーを生成した後、上部の矢印ボタンを押すと、それぞれ異なる値をControllerに送信し、
その値を元に前月、翌月のカレンダーを再表示するという内容にしたいのですが、矢印ボタンを押しても現在の年月が表示されてしまい、正常に日付が変更されません。

イメージ説明

        <div class="col-lg-6">
            <div class="month-area">
                <h2 class="contents-name">Month</h2>
                <a href="{{ url('additem/month') }}">
                    <img class="plus-icon" src="{{ asset('images/plus.png') }}" width="40" height="40 " alt="plus">
                </a>
                <p class="calendarTitle">{{ $calendarTitle }}</p>
                <div class="parent">
                    <?php $m = 1; ?>
                    <form action="{{ url('home/month/changemonth') }}" method="POST">
                        {{ csrf_field() }}
                        <input name="monthChange" type="hidden" value="prev">
                        <button type="submit" name="changemonth" style="background-color:transparent;"><i class="fas fa-angle-double-left fa-2x"></i></button>
                    </form>
                    <?php $m = 2; ?>
                    <form action="{{ url('home/month/changemonth') }}" method="POST">
                        {{ csrf_field() }}
                        <input name="monthChange" type="hidden" value="next">
                        <button type="submit" name="changemonth" style="background-color:transparent;"><i class="fas fa-angle-double-right fa-2x"></i></button>
                    </form>
                </div>
                <table class="table table-bordered" style="table-layout:fixed;">
                    <tr>
                        @foreach (['月', '火', '水', '木', '金', '土', '日'] as $dayOfWeek)
                        <th>{{ $dayOfWeek }}</th>
                        @endforeach
                    </tr>
                    @foreach ($dates as $date)
                    <?php $modalMonthData = array(); ?>
                    <?php $modalMonthDataJson = array(); ?>
                    <?php $modalMonthId = array(); ?>
                    <?php $modalMonthIdJson = array(); ?>
                    @if ($date->day == 1 && $date->format('N') != 1)

                    <td colspan="{{ $date->format('N')-1 }}"></td>

                    @endif
                    @if ($date->format('N') == 1)
                    <tr>
                        @endif
                        <td>
                            {{ $date->day }}
                            @foreach ($monthData as $md)
                            @if ($date->year == $md->year && $date->month == $md->month && $date->day == $md->day)
                            <?php array_push($modalMonthData, $md->task); ?>
                            <?php array_push($modalMonthId, $md->id); ?>
                            <?php $flg = "true"; ?>
                            @endif
                            @endforeach
                            <?php $cnt = count($modalMonthData); ?>
                            <?php $modalMonthDataJson = json_encode($modalMonthData); ?>
                            <?php $modalMonthIdJson = json_encode($modalMonthId); ?>
                            @if ($cnt >= 1)
                            <button type="button" style="background-color: transparent;" data-toggle="modal" data-day="{{ $date->day }}" data-task="{{ $modalMonthDataJson }}" data-id="{{ $modalMonthIdJson }}" data-target="#Modal">
                                <img src="{{ asset('images/flg.png') }}" width="15" height="15 " alt="flg">
                            </button>
                            @endif
                        </td>
                        @if ($date->format('N') == 7)
                    </tr>
                    @endif
                    @endforeach
                </table>
            </div>
        </div>
Route::post('/home/month/changemonth', 'HomeController@index');
public function index(Request $request)
    {
        //ログインしている認証ユーザー情報(名前)を取得
        $name = Auth::user()->name;

     内容省略

        //クエリビルダでsql文実行
        $monthData = DB::table('month')
            ->select(DB::raw('year, month, day, task, username, id'))
            ->where('username', '=', $name)
            ->get();

        //デフォルトで現在の年と月をカレンダーとして表示
        $now = new Carbon;
        $year = $now->format('Y');
        $month = $now->format('m');

        $makeDate = $request->monthChange;

        if ($makeDate == "prev") {

            $prevDate = $now->addMonths(-1);
            $year = $prevDate->format('Y');
            $month = $prevDate->format('m');
        } elseif ($makeDate == "next") {

            $nextDate = $now->addMonths(1);
            $year = $nextDate->format('Y');
            $month = $nextDate->format('m');
        }

        $calendarTitle = $year . "年" . $month . "月";

        //yyyy-mm-ddの形式にする
        $dateStr = sprintf('%04d-%02d-01', $year, $month);
        //date型に整形
        $date = new Carbon($dateStr);
        $count = $date->daysInMonth;
        $dates = [];

        for ($i = 0; $i < $count; $i++, $date->addDay()) {
            // copyしないと全部同じオブジェクトを入れてしまうことになる
            $dates[] = $date->copy();
        }

     内容省略↓

    }

おそれいりますが、間違った点についてご指摘いただけますと幸いです。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2020/07/19 19:00

    それぞれ想定の情報は渡ってきているのでしょうか?
    ただ、いずれにしても「現在表示している年月」を渡してないように見受けられるので「更に翌月」「更に前月」はいかないように思いますが…

    キャンセル

  • pararinrinrin

    2020/07/24 08:37

    ご質問を受け、デバッグバーを導入し確認したところ渡ってきていませんでした。
    そもそもViewからControllerへの値渡しについてを理解する必要がありますね。

    キャンセル

回答 1

checkベストアンサー

0

$makeDateの比較を "==" でやっているのが問題ですね。
PHPでは文字列の比較を "==" で行うと文字列ではなく数値に変換して比較しようとします。

ですので、strcmpを使うべきかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/24 08:40

    ありがとうございます。文字列比較にはstcmpを使用したいと思います。今回の原因を確認したところviewからControllerに値が渡せていないことがわかりまして、まずはそちらの解決からしていきたいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る