我是PHP和Laravel的新手,我尝试构建简单的Web应用程序,以熟悉PHP和Laravel。我在刀片文件中收到了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.php中:
<div class="border1">
@if(isset($results))
@foreach($rooms as $room)
<a href="#">$room->roomid</a>
@endforeach
@endif
</div>
任何和所有帮助将不胜感激。谢谢
更新 我忘了澄清一下,我收到错误&#39; undefined variable $ rooms&#39;之前我使用if条件检查是否设置了$ errors。在我使用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
答案 0 :(得分:3)
你应该试试
<div class="border1">
@if(isset($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
答案 1 :(得分:0)
错误错误:会议室而不是结果。您尚未通过任何名为&#39;结果&#39;的变量。从您的控制器查看。
您只需要检查是否设置了结果对象(房间)。您可以使用以下任何一种方法来执行此操作。
所有将返回布尔结果为true或false。
@if($rooms)
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
OR
@if(!empty($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
OR
@if(isset($rooms))
@foreach($rooms as $room)
<a href="#">{{$room->roomid}}</a>
@endforeach
@endif
答案 2 :(得分:0)
而不是这样做: 返回视图(&#39;仪表板&#39;,[&#39; rooms&#39; =&gt; $ rooms]);
只需在获取查看功能中打印出所有房间。然后在你的insertRooms函数中做一个: return redirect() - &gt; back();
相反,由于页面刷新,您的获取视图将自动打印出新值:-)
请开始使用紧凑方法将变量返回到您的视图,我最好练习正弦laravel 5.1: - )
此外,我建议您观看一些关于命名惯例的视频。祝你好运!