【问题标题】:Passing more than one variables from different controllers to a single view in Laravel 8将多个变量从不同的控制器传递到 Laravel 8 中的单个视图
【发布时间】:2021-11-14 02:48:04
【问题描述】:

我需要将两个不同控制器的两个变量传递给一个视图,并将数组变量中的不同值显示到 Laravel 8 中两个不同的 html 表单的选择选项。但是 Laravel 似乎不允许将两个不同的变量传递给一个单视图。

我该如何解决这个问题?

Please find the error screenshot from this link.

涉及的控制器:TimeController、CourseController

时间控制器:

    <?php

namespace App\Http\Controllers;

use App\Models\Time;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class TimeController extends Controller
{
    public function loadTime()
    {
        $timeData = DB::table('time')->select('*')->get();
        return view('admin.forms.enrollment', ['timeList' => $timeData]);
    }
}

课程控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class CourseController extends Controller
{
    public function loadCourses()
    {
        $courseData = DB::table('courses')->select('*')->get();
        return view('admin.forms.enrollment', ['courseList' => $courseData]);

        // $timeData = DB::table('time')->select('*')->get();
        // return view('admin.forms.enrollment', ['timeList' => $timeData]);
    }
}

路线:

Route::get('/enroll', [TimeController::class, 'loadTime'])->name('loadTime');
Route::get('/enroll', [CourseController::class, 'loadCourses'])->name('loadCourses');

查看:

@extends('admin.forms.layout')

@section('form')

<div class="form-group row">
          <div class="col-sm-4">
            <label for="lastname" class="col-sm-6 col-form-label">Username</label>
            <div class="col-sm-10">
              <input type="text" class="form-control" id="uname" placeholder="eg. Khatri0b3d020d">
            </div>
          </div>
          <div class="col-sm-4">
            <label for="course" class="col-sm-6 col-form-label">Course</label>
            <div class="col-sm-10">
              <select name="course" id="course" class="form-control">
              
            @foreach($courseList as $course)

                <option value="{{$course->vehicle_category}}">{{$course->course_type}}</option>

              </select>
            </div>
          </div>
        </div>

        <div class="form-group row">
          <div class="col-sm-4">
            <label for="email" class="col-sm-6 col-form-label">Package</label>
            <div class="col-sm-10">
              <input type="email" class="form-control" id="email" placeholder="eg. khatriram55@gmail.com">
            </div>
          </div>
          <div class="col-sm-4">
            <label for="phone" class="col-sm-6 col-form-label" value="+977">Start Date</label>
            <div class="col-sm-10">
              <input type="date" class="form-control" id="date" min="{{date('Y-m-d')}}">
            </div>
          </div>
        </div>

        <div class="form-group row">
          <div class="col-sm-4">
            <label for="time" class="col-sm-6 col-form-label">Preferred Time</label>
            <div class="col-sm-10">
              <select name="time" id="time" class="form-control">
                <option selected default>Select your preferred time</option>
                
                @foreach($timeList as $time)

                <option value="{{$time->id}}">{{$time->time}}</option>

                @endforeach 

              </select>
            </div>
          </div>
        </div>

        <div class="form-group row">
          <div class="col-sm-4">
            <input type="submit" value="Admit" name="admit" class="btn btn-success">
          </div>
</div>

@endsection

【问题讨论】:

  • 为什么两个不同的控制器需要相同的视图??
  • 我是 MVC 模式和 Laravel 的新手。我正在学习这些概念并一起从事个人项目。实际上我要做的是从时间表中获取时间数据和从课程表中获取课程数据并将其显示在单个视图上。
  • 所以你需要将courses 表数据和time 表数据都放到单一视图中
  • 是的。该视图基本上是学生注册的一种形式。时间表包含时间列表(早上 7 点、早上 8 点等),课程表包含课程列表。该表单需要分别在时间和课程字段的选择选项中加载时间和课程数据。
  • 创建一个CoursesAndTimeController 做这两件事并将两个结果传递给视图。 (注意这是可能的几十种方法之一,不要只是因为互联网上的某个人这么说就这样做)

标签: php laravel model-view-controller routes


【解决方案1】:

因此,根据您的评论,我了解您的问题。而且你不需要两个控制器和单独的路由。

通过运行创建一个名为StudentEnrollmentController的新控制器

php artisan make:controller StudentEnrollmentController 并将以下代码粘贴到控制器中

<?php

namespace App\Http\Controllers;

use App\Models\Time;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class StudentEnrollmentController extends Controller
{
    public function showEnrollmentForm()
    {
        $timeData = DB::table('time')->get();
        $courseData = DB::table('courses')->get();
        return view('admin.forms.enrollment', compact('timeData', 'courseData'));
    }
}

将以下行添加到routes/web.php

Route::get('/enrollmentForm', [App\Http\Controllers\App\Http\Controllers::class, 'showEnrollmentForm'])->name('enrollmentForm');

现在访问 URL enrollmentForm 它将正确显示表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多