在 Laravel 8 中将多个变量从不同控制器传递到单个视图
Passing more than one variables from different controllers to a single view in Laravel 8
我需要将两个变量从两个不同的控制器传递到一个视图,并将数组变量的不同值显示到 Laravel 8 中两个不同的 html 表单的 select 选项。但是 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
根据您的评论,我理解您的问题。而且你不需要两个控制器和单独的路由。
通过 运行
创建名称为 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
它将正确显示表单。
我需要将两个变量从两个不同的控制器传递到一个视图,并将数组变量的不同值显示到 Laravel 8 中两个不同的 html 表单的 select 选项。但是 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
根据您的评论,我理解您的问题。而且你不需要两个控制器和单独的路由。
通过 运行
创建名称为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
它将正确显示表单。