Ошибка цикла Laravel 5.3

Привет, я пытаюсь зациклить календарные месяцы и годы, но мой цикл останавливается на самой первой итерации в индексной функции. Можете ли вы мне помочь?

Функция индекса:

public function index()
{
$users = DB::table('users')->where('roles_id', '2')->get();

  date_default_timezone_set("Asia/Hong_Kong");

  for ($iterateYear = 2017; $iterateYear < 2018; $iterateYear++) {
    for ($iterateMonth = 1; $iterateMonth <= 12; $iterateMonth++) {

      /* Set the date */
      $date = strtotime(sprintf('%s-%s-01', $iterateYear, $iterateMonth));
      return $this->renderCalenderMonth($date);

    }
  }

    return view('transaction.index', [
      'users' => $users
    ]);
}

Функция RenderCalendarMonth:

публичная функция renderCalenderMonth($date) {

  // $date = strtotime(date("Y-m-d"));
  $NUMBER_OF_COLUMNS = 37;

  $day = date('d', $date);
  $month = date('m', $date);
  $year = date('Y', $date);

  $firstDay = mktime(0,0,0,$month, 1, $year);
  $title = strftime('%B', $firstDay);
  $dayOfWeek = date('D', $firstDay);
  $daysInMonth = cal_days_in_month(0, $month, $year);
  /* Get the name of the week days */
  $timestamp = strtotime('next Sunday');
  $weekDays = [];

  for($i = 0; $i < $NUMBER_OF_COLUMNS; $i++) {
      $weekDays[] = strftime('%a', $timestamp);
      $timestamp = strtotime('+1 day', $timestamp);
  }
  $blank = date('w', strtotime("{$year}-{$month}-01"));

  $divid = $title.$year;

  return view('transaction.index', [
    'date' => $date,
    'day' => $day,
    'month' => $month,
    'year' => $year,
    'firstDay' => $firstDay,
    'title' => $title,
    'dayOfWeek' => $dayOfWeek,
    'daysInMonth' => $daysInMonth,
    'timestamp' => $timestamp,
    'weekDays' => $weekDays,
    'blank' => $blank,
    'divid' => $divid,
    'NUMBER_OF_COLUMNS' => $NUMBER_OF_COLUMNS
  ]);

}

person jean chu    schedule 11.11.2016    source источник


Ответы (1)


У вас есть оператор возврата в вашем цикле, поэтому вы переходите в renderCalenderMonth, а затем возвращаете сгенерированное представление. затем выйдите из цикла. Если вы хотите постоянно возвращать значения из цикла, используйте ключевое слово yield php.

person EpisodeInfinity    schedule 11.11.2016
comment
куда мне тогда передать генератор? На взгляды? - person jean chu; 11.11.2016
comment
Я бы сделал что-то вроде этого: - person EpisodeInfinity; 11.11.2016
comment
Что бы сделать, это что-то вроде этого: $months = []; $months[] = $this->renderCalenderMonth($date); теперь у вас есть массив месяцев, затем вы можете повторять его и делать с каждым месяцем все, что хотите. - person EpisodeInfinity; 11.11.2016
comment
Я могу сохранить значение в массиве. И теперь я могу отображать значения. Однако мне трудно зацикливать каждое значение для моей функции. Вы знакомы с Laravel 5.3? - person jean chu; 17.11.2016
comment
Может быть, если вы сможете объяснить, что именно вы пытаетесь сделать, мы сможем получить более четкую картину, и может появиться лучший ответ. Например, ваши вложенные циклы for сбивают с толку, потому что они повторяются только один раз, с 2017 по 2018 год, что означает, что вы не нужен родительский цикл. Только дочерний цикл, который повторяется в течение 12 месяцев. Пожалуйста, дайте полную спецификацию, тогда мы сможем взять ее оттуда. - person EpisodeInfinity; 17.11.2016
comment
Что я хотел сделать с массивом по месяцам и годам. Я хочу создать календарную таблицу для каждого месяца в году. Каждая таблица будет вставлена ​​в div для навигации по вкладкам. Вот мой репозиторий git github.com/chuaquino/collab.git - person jean chu; 17.11.2016