我正在尝试设置一个简单的表单来保存,但我想确保我们使用最佳实践,比如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;
}
如何使用依赖注入将表单数据正确保存在存储功能上?
答案 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
记录的更新,那么您应该查看firstOrCreate
和firstOrNew
方法。
答案 2 :(得分:0)
你所做的只是一种很好的做法。那可以节省很多代码。但是,还有更多的遗留问题。
除了以上两点之外,你已经走得很远了。