【发布时间】:2016-05-10 04:53:31
【问题描述】:
我是 PHP 和 Laravel 的新手,我尝试构建简单的 Web 应用程序以熟悉 PHP 和 Laravel。我在刀片文件中得到一个undefined variable。如果有人能帮我解决这个问题,我们将不胜感激。
基本上,我想要发生的是:
我有一个名为dashboard.blade.php 的视图,在这个视图中有一个文本字段和按钮。输入房间号并单击按钮后,必须将房间号保存在数据库中,并且需要刷新当前视图,但这一次,新房间必须显示在顶部。房间毫无问题地保存在数据库中,但是当我尝试使用 foreach 循环检索它时,我收到 'undefined variable rooms' 错误
我正在使用 Laravel 5.2
与触发此操作有关的按钮(在 dashboard.blade.php 中)
<form action="{{ route('viewroom') }}" method="POST"> //route is viewroom
Please Insert The New Room Number<br>
<input type="text" name="roomid"/>
<button type="submit">Add New Room</button>
<input type="hidden" value="{{ Session::token() }}" name="_token"/>
</form>
路由文件
Route::post('/dashboard',[
'uses' => 'RoomController@InsertRoom',
'as' => 'viewroom'
]);
RoomController 中使用的函数
public function InsertRoom(Request $request){
$this->validate($request, [
'roomid' => 'required | numeric | unique:insert_rooms',
]);
$room = new InsertRoom();
$room->roomid = $request['roomid'];
$room->status = 0;
$room->save();
$rooms = InsertRoom::all();
$request->session()->flash('alert-success', 'Room was successful added!');
return view('dashboard', ['rooms' => $rooms]);
}
在dashboard.blade.php中:
<div class="border1">
@if(isset($results))
@foreach($rooms as $room)
<a href="#">$room->roomid</a>
@endforeach
@endif
</div>
我们将不胜感激。谢谢
更新 我忘了澄清这一点,在我使用 if 条件检查是否设置了 $errors 之前,我收到了错误“未定义的变量 $rooms”。在我使用 if(isset($errors)) 之后,我没有再收到错误,但我想显示的信息没有显示
更新 2
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
<style>
h1{
text-align: center;
}
.border1{
border: dotted;
border-color: red;
text-align: center;
padding: 20px;
}
.ulerror{
text-align: center;
color: red;
}
.flash-message{
text-align: center;
font-weight: bolder;
color: lawngreen;
}
ul li{
font-family: "Lucida Console";
font-size: 24px;
list-style: none;
padding: 10px;
}
a{
padding: 8px;
}
</style>
</head>
<body>
<h1>Dashboard</h1>
<div class="border1">
@if(isset($rooms))
{{--{{ dd(isset($rooms)) }}--}}
@foreach($rooms as $room)
<a href="#">{{ $room->roomid }}</a>
@endforeach
@endif
{{--<a href="{{ route('roomdetails', ['id' => '1', 'status' => 'free']) }}">1</a> IGNORE THIS--}}
</div>
<br><br><br>
<div class="border1">
<b>Insert a new Room</b>
<br><br>
<form action="{{ route('viewroom') }}" method="POST">
Please Insert The New Room Number<br>
<input type="text" name="roomid"/>
<button type="submit">Add New Room</button>
<input type="hidden" value="{{ Session::token() }}" name="_token"/>
</form>
</div>
<div class="flash-message">
@foreach (['danger', 'warning', 'success', 'info'] as $msg)
@if(Session::has('alert-' . $msg))
<p class="alert alert-{{ $msg }}">{{ Session::get('alert-' . $msg) }} <a href="{{ route('backhome') }}" class="close" data-dismiss="alert" aria-label="close">×</a></p>
@endif
@endforeach
</div> {{--flash message--}}
@if(count($errors) > 0)
<div class="ulerror">
<ul>
@foreach($errors->all() as $error)
{{ $error }}
@endforeach
</ul>
</div> {{--error handling--}}
@endif
【问题讨论】:
-
$rooms = InsertRoom::all(); dd($rooms);显示什么? -
@AlexeyMezenin 基本上我想从 insert_rooms 表中检索所有行并将其存储在对象 $rooms 中。然后将变量 $rooms 传递到视图中,并通过使用 '$room->roomid' 我尝试仅获取我想要显示的房间 ID。希望我很清楚
-
我看到了。 ) 为了能够帮助你,我需要和你一起调试它。请使用我之前评论中的代码并告诉我输出。
-
@AlexeyMezenin 对不起,我的错……我以为你在问代码的作用。当我输入 dd($rooms) 时,我得到以下输出: Collection {#207 ▼ #items: array:13 [▶] }
-
好的,现在删除 dd 并将其添加到视图中(在 foreach 之前):
{{ dd(isset($rooms)) }}