Laravel中传递给Blade视图的events变量未定义问题求助
解决Laravel中FullCalendar事件数据传递的"变量未定义"问题
错误根源
- 你在
RegisteredUserController中用redirect()->with(['events' => $events])是将数据存入session闪存,并非直接传递给视图的变量。 - 当前
/home路由的闭包仅返回视图,没有从session中取出events并传递给视图,导致Blade模板里的$events变量不存在。 - 你尝试的
Session::get('events')直接输出会导致JS语法错误,因为PHP数组转成字符串后不符合JS对象格式。
解决方案
方案一:在Home路由中直接获取事件数据(推荐)
用户每次访问首页都需要最新的日历事件,直接在路由中查询数据库并传递数据更合理:
修改routes/web.php:
use App\Models\Cita; Route::get('/home', function (){ $events = []; $citas = Cita::all(); foreach($citas as $cita){ $events[] = [ 'title' => $cita->paciente_id, 'start' => $cita->hora_de_inicio, 'end' => $cita->hora_de_finalizacion ]; } return view('homeView', compact('events')); })->name('homeView');
保持homeView.blade.php代码不变:
<div id="calendar"></div> <script> $(document).ready(function(){ var citas = @json($events); $('#calendar').fullCalendar({ header: { left: 'month, agendaWeek, agendaDay', }, events: citas }) }); </script>
同时删除RegisteredUserController中传递events的代码,改为直接跳转:
return redirect(RouteServiceProvider::HOME);
方案二:仅在用户注册时传递一次性数据
如果需要在注册成功后一次性传递数据,修改/home路由从session中取数并传递给视图:
修改routes/web.php:
Route::get('/home', function (){ $events = session()->pull('events', []); // 取出session数据并清除闪存 return view('homeView', compact('events')); })->name('homeView');
homeView.blade.php代码保持不变即可正常获取数据。
之前尝试无效的原因
return redirect(RouteServiceProvider::HOME, compact('events'));:redirect方法的第二个参数是HTTP状态码,不是视图变量,写法错误导致变量无法传递。var citas = {{ Session::get('events') }};:直接输出PHP数组会生成Array字符串,引发JS语法错误,正确写法应为@json(Session::get('events', []))。
内容的提问来源于stack exchange,提问作者RicardoFuentes437
相关产品推荐
相关产品推荐

