【问题标题】:Fire event on create and another record创建时触发事件和另一条记录
【发布时间】:2016-09-06 04:12:28
【问题描述】:

我尝试创建公司和用户。创建公司时应该创建触发事件。我注册了观察者,一切正常。但是用户需要有密码和电子邮件(这些数据是从表单发送的)但是公司表没有这个字段。目前我在Company 模型中声明了两个字段public $tmpEmailpublic $tmpPassword,同时我分配了我填充这些属性的属性。之后我在我的观察者类中阅读了这个属性,但对我来说这还不够好。我怎样才能做得更好?

简化示例:

class Company extends Model
{
    $fillable = ['company_name', 'phone_number'];
}

class CompanyObserver
{
    public function created(Company $company)
    {
        print_r($company->company_name);
        print_r($company->tmpPassword);
        print_r($company->tmpEmail);
        $user = new User(['name' => $company->company_name', 'email' => $company->tmpEmail, 'password' => $this->tmpPassword);
    }
}

【问题讨论】:

  • 您在哪里创建公司?来自响应函数?
  • 目前正在测试中(TDD :)),最终购买公司将在控制器中创建。
  • 请把我的回答当作一个“好”格式的想法。在对 cme​​ts 投反对票之前。在您的单元测试中,您应该只测试模型内的插入。在您的控制器中,您可以一起测试公司和用户

标签: php laravel events eloquent


【解决方案1】:

只是一个格式化的想法

在我看来,您在模型中创建了太多的 porpose。 Company 应该只知道自己。

如果您有像表单中的操作这样的场景:

public function actionFromForm(Request $request) {
   $company = //Save your model
   $user = new User(['name' => $company->company_name, 'email' => $request->input('tmpEmail'), 'password' => $request->input('tmpPassword'));
}

【讨论】:

  • 如果我只在控件中使用它,这很好,但我需要一些自动的东西,因为当我想创建公司时,我不会在每个地方创建 User 对象。 Company 只知道自己,这是观察者模式的角色,用于查看公司并在某些操作(在我的情况下创建)后添加用户。你现在有Company 有不必要的信息(关于用户),但这是我的问题,如何使用观察者模式来解决。
猜你喜欢
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多