请问 RegisterController控制器的create方法中 return User::create 为何不能改为 User::create ,之后再单独跳转,谢谢

使用laravel5.3,直接使用make:auth生成用户注册管理,遇到了一个问题,请大家指点,谢谢:

因为想要给注册用户发送邮件,所以想直接将发送邮件的语句直接写在 RegisterController控制器的create方法中,但这个create方法中的 return User::create 为何不能改为 User::create 呢?因为这个直接return,如此一来,就不能实现创建用户之后再发送邮件了

protected function create(array $data)
    {
      return User::create([
       'name' => $data['name'],
       'email' => $data['email'],
       'password' => bcrypt($data['password']),
       'avatar'=>'/image/default_user_avatar.jpg',
       'confirm_code'=>str_random(48),
   ]);
  }

User::create 放到变量里再返回
$user = User::create([...]);
// 这里写其他操作
return $user;

JellyBool

嗯,可以的。我记得这个视频说得非常清楚。包括发送邮件

https://www.laravist.com/series/build-a-zhihu-website-with-laravel/episodes/2

phperllh

可以的呀,我还记得站长的视频里是把写入数据库的这一步写到model里,然后用的event.

oileme

User::create 放到变量里再返回
$user = User::create([…]);
// 这里写其他操作
return $user;

bluesnow 回复 oileme

这样确实是可以了,只是我还是没有理解为何一定要 return $user呢?
前面不是User::create已经将数据写入数据库了吗?但如果不 return $user就会报错这是肯定的

谢谢大家的热心回复,在此一并感谢

oileme 回复 bluesnow

我作为白菜,我的理解是这样的
return User::create([…]);
这段理解为 create后暂时存在缓存之类的
返回的也是 想象成sql语句之类的吧
return的时候 把缓存的命令执行
所以 存在变量时 这句命令只是暂时存在变量
执行完所有操作以后再把变量返回就执行所需要的命令
虽然才接触laravel 不到几天,看视频后的感觉是这样的

以上是纯属个人理解,说错的部分愿大家指点
这样我和提问者也会能少走弯路^^

phperllh

RegistersUsers.php的register()方法用到了protected function create(array $data)

phperllh

因为login(this>create()).Auth::login(this->create()).Auth::login(user) 要求$user是user的instance

bluesnow 回复 phperllh

基本上明白了,再次感谢