【问题标题】:Declaration of User::save() should be compatible with ...\Model::save(array $options = Array)User::save() 的声明应该与 ...\Model::save(array $options = Array) 兼容
【发布时间】:2014-09-28 11:39:06
【问题描述】:

我是 Laravel 的新手,来自 Codeigniter。

我正在尝试在Users 模型中加载save() 函数,以最终将帖子数据插入users 表中。

但我得到了错误

Declaration of User::save() should be compatible with …\Model::save(array $options = Array)

表单被提交到我的控制器中的这个函数。

public function createUser () {
    $validator = Validator::make(
        array(
            'email' => Input::get('email'),
            'password' =>Input::get('password')
        ),
        array(
            'email' => 'required|email|unique:users',
            'password' => 'required|min:5|max:25'
        )
    );

    if ($validator->fails()) {
        echo 'fail';
    } else {
        $hashPass = Hash::make(Input::get('password'));

        //  input new row
        $user = new User(Input::except('Submit'));
        $user::save();
    }

}

我的用户模型是 Laravel 附带的标准模型,并添加了以下几行。 (我只是想让它打印一些东西。)

protected $fillable = array('email');

public function save ($user) 
{
    print_r($user);
}

我不确定我是否正确使用了模型,但到目前为止我发现没有任何帮助。

【问题讨论】:

  • 您正试图覆盖 Eloquent save() 函数,坏主意。从该模型中删除它并查看laravel.com/docs/eloquent#insert-update-delete
  • 另外,Laravel 中大多不使用 echo。在函数中,使用了return。
  • @delmadord 所说的 - 如果您需要在 save 上进行任何处理,请使用 model events
  • 另外,我喜欢使用raveren/kint 包,而不是使用echoprint_r 进行调试。它的格式非常好,并允许您在浏览器中浏览属性和方法。
  • 也应该把$user::save();改成$user->save();

标签: php laravel model eloquent


【解决方案1】:

如果你替换了一个类的函数,你必须像在类中定义它一样定义它。

所以需要这样声明保存函数:

public function save(array $options = [])
{
    // your before save code here

    if(parent::save($options)) {
      // your after save code here
    }
    // return boolean here
}

【讨论】:

  • 是的。原因:如果你替换了一个类的函数,你必须按照在类中定义的方式来定义它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多