在Laravel中保存表单数据的正确方法是什么(使用注入模型)?

时间:2015-01-28 15:46:38

标签: php laravel laravel-4 dependency-injection

我正在尝试设置一个简单的表单来保存,但我想确保我们使用最佳实践,比如DI。

在控制器文件中,我有

public function store()
{
    //get form data
    $data = Input::all();

    $newclient = new Client($data);
    $newclient->save();
    return Redirect::route('clients.index');
}

但那真的不是依赖注入。 (对吗?)我像这样注入了模型

public function __construct(\Client $clientmodel)
{
    $this->clientmodel=$clientmodel;
}

如何使用依赖注入将表单数据正确保存在存储功能上?

3 个答案:

答案 0 :(得分:4)

查看__constructor中的Illuminate\Database\Eloquent\Model,您可以看到它使用fill()来分配传入的值。

public function __construct(array $attributes = array())
{
    $this->bootIfNotBooted();
    $this->syncOriginal();
    $this->fill($attributes);
}

所以你可以在实例化类之后使用fill()来做同样的事情:

$this->clientmodel->fill($data)
$this->clientmodel->save();

或者,如果您只想保存它,可以使用create()

$this->clientmodel->create($data);

答案 1 :(得分:3)

如果您总是创建一个新对象,那么您可以使用Eloquent Model的create方法,如下所示:

public function store()
{
    //get form data
    $data = Input::all();

    $this->clientmodel->create($data);

    return Redirect::route('clients.index');
}

如果有时此路线可能会处理现有Client记录的更新,那么您应该查看firstOrCreatefirstOrNew方法。

答案 2 :(得分:0)

你所做的只是一种很好的做法。那可以节省很多代码。但是,还有更多的遗留问题。

  1. 始终迭代每个输入以检查哪个输入不存在。那么,在你的情况下,这是一个简单的形式。但如果它是一个API,客户端会发送各种输入,您需要知道会发生什么。有时,当输入不存在时,可能会导致严重的问题,例如将未定义输入的值分配给模型。
  2. 始终检查输入是否有效。确保每个输入符合您的标准。您可以进行各种验证以实现它。
  3. 除了以上两点之外,你已经走得很远了。