模型没有传递给控制器​​laravel

时间:2018-01-25 20:40:56

标签: php laravel

我一直在学习Laravel,并且我试图在登录视图中获取一个表单以绑定到模型,然后将模型传递给控制器​​,然后我将模型传递给另一个仪表板查看以显示它的用户名属性以测试它是否正常工作。用户名未显示,因此模型似乎没有约束力。

我查看了文档,无法弄清楚我还需要做什么/我做错了什么。

由于

模型

<?php
/**
 * Created by PhpStorm.
 * User: Theo
 * Date: 25/01/2018
 * Time: 19:35
 */

namespace App\Http\Controllers\Models;


class User
{
    public $id;
    public $username;
    public $password;
}

控制器

    <?php

    namespace App\Http\Controllers;

    use App\Http\Controllers\Models\User;
    use Illuminate\Http\Request;


    class LoginController extends Controller
    {
        public function index(){
            $user = new User();
            return view('pages.login.index')->with('user', $user);
        }

        public function attemptLogin(User $user){

            return view('pages.dashboard.index')->with('user', $user);
        }
    }

登录视图

@extends('layouts.default')
@section('content')
    <div id="login-container">
      <div class="login-box">
        {!! Form::model($user, ['action' => 'LoginController@attemptLogin']) !!}

          {!! Form::text('username', @$user->username) !!}
          {!! Form::password('password', @$user->password) !!}

          {!! Form::submit('Login') !!}

          {!! Form::close() !!}
      </div>
    </div>
@stop

仪表板视图

@extends('layouts.default')
@section('content')
    <h3>Welcome to the dashboard! {{{ $user->username }}}</h3>
@stop

路线

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('players');
});

/*
Route::get('/players/{uid}', function ($uid) {
    return view('players' . $uid);
});
*/

Route::get('dashboard', 'DashboardController@index');

Route::get('login', 'LoginController@index');
Route::post('login/attemptLogin', 'LoginController@attemptLogin');

4 个答案:

答案 0 :(得分:1)

更改

<?php
/**
 * Created by PhpStorm.
 * User: Theo
 * Date: 25/01/2018
 * Time: 19:35
 */


namespace App\Http\Controllers\Models;


class User
{
    public $id;
    public $username;
    public $password;
}
对此。将文件放入app文件夹并添加扩展模型

<?php
namespace App;
/**
 * Created by PhpStorm.
 * User: Theo
 * Date: 25/01/2018
 * Time: 19:35
 */

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['username'];

    protected $hidden = ['password'];
}

答案 1 :(得分:1)

您应该通过键入使用artisan命令行创建模型 php artisan make:model User 然后,它将在User文件夹中为您创建模型app/

您正在app/Http/Controllers内创建模型,该模型仅用于存储控制器。

如果你想要一个基本的auth系统,你可以运行php artisan make:auth,它将使用基本的auth系统生成一个bootstrap样板

答案 2 :(得分:0)

您没有任何路线参数。

要使用Route-Model Binding,您需要使用资源路由或指定一个等于控制器方法参数名称的路由参数。

所以如果你有:

    public function attemptLogin(User $user) {}

要注入User实例,您需要有一个匹配$ user的路由参数:

    Route::post('login/attemptLogin/{user}', 'LoginController@attemptLogin');

但是,我不确定为什么要尝试登录特定用户而不是将用户名作为请求变量提供。

答案 3 :(得分:0)

如果您将用户模型的命名空间更改为App\Http\Controllers\Models\User,则需要更新config/auth.php文件。

搜索此代码:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
],

并将模型部分更改为:'model' => App\Http\Controllers\Models\User::class,

BTW:将模型移到Http文件夹下并不是一个好主意,因为你将HTTP层与业务层混合在一起。