【问题标题】:Laravel 5 and understanding MVC - How do I get the db data to my views?Laravel 5 和理解 MVC - 如何将数据库数据获取到我的视图中?
【发布时间】:2015-05-28 18:13:54
【问题描述】:

我是 Laravel 5 和 MVC 世界的新手。

我已经安装了 Laravel 5 样板项目,一切正常,开箱即用。我可以注册然后登录到应用程序。

我有点理解路由、控制器、模型和视图的角色,但我无法弄清楚从用户数据库表中检索数据并将其显示在我的主视图中的语法(使用 HomeController)。

我不确定哪段代码放在哪里,以及语法应该如何编码。在下面的代码中,我以用户身份登录,我只是试图显示用户表中的所有用户。

你能帮忙吗?如果我能理解如何从我的数据库中获取数据到我的视图中,我会很高兴。我正在寻找简单的例子。我在网上看到了很多示例,但对于大多数人来说,我什至不知道在哪里(控制器、路由等)复制提供的代码。

下面的代码出现以下错误:

 FatalErrorException in HomeController.php line 52: Class 'App\Http\Controllers\User' not found

routes.php

  Route::get('home', 'HomeController@index');

HomeController.php

<?php namespace App\Http\Controllers;

class HomeController extends Controller {

    /*
    |--------------------------------------------------------------------------
    | Home Controller
    |--------------------------------------------------------------------------
    |
    | This controller renders your application's "dashboard" for users that
    | are authenticated. Of course, you are free to change or remove the
    | controller as you wish. It is just here to get your app started!
    |
    */

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard to the user.
     *
     * @return Response
     */
    public function index()
    {
        $users = User::all();

        return View::make('user.index', ['users' => $users]);
    }

Home.blade.php

@extends('app')

@section('content')
<div class="container">

    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <div class="panel panel-default">
                <div class="panel-heading">List of users</div>

                <div class="panel-body">
                <table>
                @foreach($users as $key => $value)
                 <tr>
                <td>{{ $value->id }}</td>
                 <td>{{ $value->name }}</td>
                <td>{{ $value->email }}</td>

                </tr>
                @endforeach
                </table>

                </div>
            </div>
        </div>
    </div>



</div>
@endsection

【问题讨论】:

    标签: model-view-controller laravel-5


    【解决方案1】:

    Laravel 5 是命名空间并自动加载 PSR-4,所以在你的控制器中 $users = User::all(); 应该是 App\User::all(); 或 use App\User; 在命名空间声明之后的文件顶部。

    你的观点也不正确。这个@foreach($users as $key =&gt; $value) 应该是@foreach($users as $user) 然后你访问用户属性作为普通字段:$user-&gt;id、$user-&gt;name 等。

    另外,laravel 5 的视图是这样的(你的没有错,只是语法不同):

    return view('user.index')->with(['users' => $users]);
    

    或者用一些巫术:

     return view('user.index')->withUsers($users);
    

    另一个让您真正了解事物工作原理的技巧:使用 tinker。打开控制台,进入 laravel 文件夹并输入 php artisan tinker。在那里您可以执行 php 代码并检查输出。输入User::all() 并检查错误。然后输入App\User::all() 并检查响应。

    【讨论】:

    • 谢谢@hfingler!我添加了使用 App\User;在我的控制器顶部,然后将我的公共函数 index() 更改为 $user = User::all();返回视图('user.index')->with(['users' => $users]);最后我改变了我的观点,将@foreach($users as $key => $value) 替换为@foreach($users as $user) 但现在我收到以下错误: InvalidArgumentException in FileViewFinder.php line 140: View [user .index] 未找到。
    • 那里有文件吗? resources/views/user/index.blade.php?
    • 不,我使用的视图是 resources/views/home.blade.php
    • 那你必须返回正确的视图,如:return view('home')-&gt;with ...
    • 哇!我的头痛消失了!非常感谢@hfingler
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多