【问题标题】:Laravel - Missing argument 2 for UserController::edit()Laravel - UserController::edit() 缺少参数 2
【发布时间】:2014-01-10 23:02:00
【问题描述】:

我正在使用框架 Laravel。

我有 2 个表(用户和人员)。当我想同时编辑用户和人时,我收到错误消息:

缺少 UserController::edit() 的参数 2

表用户

CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_username` VARCHAR(45) NOT NULL,
  `user_email` VARCHAR(45) NOT NULL,
  `user_password` CHAR(32) NOT NULL,
  `user_salt` CHAR(32) NOT NULL,
  `user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_modified` TIMESTAMP NULL,
  `user_deleted` TIMESTAMP NULL,
  `user_lastlogin` TIMESTAMP NULL,
  `user_locked` TIMESTAMP NULL,
  `user_token` VARCHAR(128) NULL,
  `user_confirmed` TIMESTAMP NULL,
  PRIMARY KEY (`user_id`, `person_id`),
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
  INDEX `fk_users_persons1_idx` (`person_id` ASC),
  CONSTRAINT `fk_users_persons1`
    FOREIGN KEY (`person_id`)
    REFERENCES `festival_aid`.`persons` (`person_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

桌人

CREATE TABLE IF NOT EXISTS `festival_aid`.`persons` (
  `person_id` BIGINT NOT NULL AUTO_INCREMENT,
  `person_firstname` VARCHAR(45) NULL,
  `person_surname` VARCHAR(45) NULL,
  `person_created` TIMESTAMP NOT NULL,
  `person_modified` TIMESTAMP NULL,
  `person_deleted` TIMESTAMP NULL,
  PRIMARY KEY (`person_id`))
ENGINE = InnoDB;

模范人物

class Person extends Eloquent {

    protected $table = 'persons';

    protected $primaryKey = 'person_id';

    public function person()
    {
        return $this->belongsTo('User');
    }

    public $timestamps = false;
}

具有编辑和更新功能的 UserController

public function edit($user_id, $person_id)
{
    $user = User::find($user_id);
    $person = Person::find($person_id);

    return View::make('users.edit')
        ->with('user', $user)
        ->with('person', $person);
}

public function update($user_id, $person_id)
{
    $rules = array(
        'person_firstname' => 'required',
        'person_lastname' => 'required',
        'user_username' => 'required|unique:users',
        'user_email' => 'required|unique:users|email',
    );
    $validator = Validator::make(Input::all(), $rules);

    if ($validator->fails()) {
        Redirect::to('users/' . $user_id . '/' . $person_id . '/edit')
            ->withErrors($validator)
            ->withInput(Input::except('user_password'));
    } else {
        $user = User::find($user_id);
        $person = Person::find($person_id);

        $person->person_firstname = Input::get('person_firstname');
        $person->person_lastname = Input::get('person_lastname');
        $user->user_username = Input::get('user_username');
        $user->user_email = Input::get('user_email');

        $user->save();
        $person->save();

        Session::flash('message', 'Successfully updated user!');
        return Redirect::to('users/index');
    }

查看编辑

<legend>Edit {{ $person->person_firstname }}</legend>

{{ HTML::ul($errors->all()) }}

    {{ Form::model($user, $person, array('method' => 'PUT')) }}

    <div class="form-group">
        {{ Form::label('firstname', 'Firstname') }}
        {{ Form::text('person_firstname', Input::old('firstname'), array('class'=>'form-control', 'placeholder' => 'Firstname')) }}
    </div>

    <div class="form-group">
        {{ Form::label('surname', 'Surname') }}
        {{ Form::text('person_surname', Input::old('surname'), array('class'=>'form-control', 'placeholder' => 'Surname')) }}
    </div>

    <div class="form-group">
        {{ Form::label('username', 'Username') }}
        {{ Form::text('user_username', Input::old('username'), array('class'=>'form-control', 'placeholder' => 'Username')) }}
    </div>

    <div class="form-group">
        {{ Form::label('email', 'Email') }}
        {{ Form::text('user_email', Input::old('email'), array('class' => 'form-control')) }}
    </div>

    <div class="form-group">
        {{ Form::label('Password') }}
        {{ Form::password('user_password', array('class'=>'form-control', 'placeholder' => 'Password')) }}
    </div>

    {{ Form::submit('Edit the User!', array('class' => 'btn btn-primary')) }}

    {{ Form::close() }}

路线

Route::get('/users/{user_id}/edit', 'UserController@edit');

我做错了什么?

【问题讨论】:

    标签: php sql laravel arguments edit


    【解决方案1】:

    您的函数声明指定了两个参数:

    public function edit($user_id, $person_id)
    

    然而路由只注入一个参数user_id

    Route::get('/users/{user_id}/edit', 'UserController@edit');
    

    应该是这样的:

    Route::get('/users/{user_id}/{person_id}/edit', 'UserController@edit');
    

    或者从函数声明中删除$person_id

    【讨论】:

    • 现在它给了我:Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException。我认为它现在无法找到路线..
    • 我还将 return Redirect::to('users/' . $user_id . '/edit') 更改为此 return Redirect::to('users/' . $user_id . '/' 。 $person_id . '/edit') 在更新操作中
    • 您需要确保任何指向编辑页面的链接都有相关更新,比较 url 和定义的路由。现在您知道为什么会发生这种情况,您可能会弄清楚。同时使用新数据更新原始问题作为编辑。
    • 我在浏览器中给出了这个 ...users/1/1/edit 它说 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from persons where id = ? limit 1) (Bindings: array ( 0 => '1', ))
    • 我需要提供受保护的 $primaryKey = 'person_id';在 Person 模型中。现在我得到未定义的变量:人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2020-07-16
    • 2017-05-03
    • 2022-01-16
    • 2017-01-18
    相关资源
    最近更新 更多