Laravel 5.2中未定义的变量错误


Undefined Variable Error in Laravel 5.2

我对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">&times;</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:-)

我还建议你看一些关于命名大会的视频。祝你好运!