我对PHP和Laravel都有点陌生,我试图构建简单的Web应用程序,以便熟悉PHP和Laravil。我在刀片文件中得到一个undefined variable
。如果有人能帮我解决这个问题,我将不胜感激。
基本上,我想要的是:我有一个名为dashboard.blade.php
的视图,在这个视图中有一个文本字段和按钮。当输入房间编号并单击按钮时,房间编号必须保存在数据库中,并且需要刷新当前视图,但这一次,新房间必须显示在顶部。文件室可以毫无问题地保存在数据库中,但当我尝试使用foreach
循环检索它时,我会得到"未定义的可变文件室"错误
我正在使用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.hp:中
<div class="border1">
@if(isset($results))
@foreach($rooms as $room)
<a href="#">$room->roomid</a>
@endforeach
@endif
</div>
任何帮助都将不胜感激。谢谢
更新我忘了澄清一下,在我使用if条件检查是否设置了$errors之前,我得到了错误"undefined variable$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
您应该尝试
<div class="border1">
@if(isset($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
键入错误:房间而不是结果。您尚未将任何名为"results"的变量从控制器传递到视图。
您只需要检查是否设置了结果对象(房间)。您可以使用以下任意一项来执行此操作。
All将返回布尔结果true或false。
@if($rooms)
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
或
@if(!empty($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
或
@if(isset($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
不要这样做:返回视图("仪表板",['rooms'=>$rooms]);
只需在获取视图功能中打印出所有房间即可。然后在您的insertRooms功能中执行:return重定向()->back();
相反,由于页面刷新,您的get视图将自动打印出新值:-)
请开始使用紧凑的方法将变量返回到您的视图中,我的最佳实践是sine laravel 5.1:-)
我还建议你看一些关于命名大会的视频。祝你好运!