Php 复制类属性中的所有请求属性
在我的控制器中,我有存储和更新的方法。如您所见,我正在逐个复制Php 复制类属性中的所有请求属性,php,laravel-5.4,Php,Laravel 5.4,在我的控制器中,我有存储和更新的方法。如您所见,我正在逐个复制$tour属性中的$request属性: class TourController extends Controller { public function store(Request $request, Tour $tour) { $tour->name = $request->name; $tour->flight = $request->fl
$tour
属性中的$request
属性:
class TourController extends Controller
{
public function store(Request $request, Tour $tour)
{
$tour->name = $request->name;
$tour->flight = $request->flight;
$tour->price = $request->price;
$tour->description = $request->description;
$tour->save();
return redirect('home/tour/see');
}
public function update(Request $request)
{
$tour = Tour::find($request->id);
$tour->name = $request->name;
$tour->flight = $request->flight;
$tour->price = $request->price;
$tour->description = $request->description;
$tour->save();
return redirect('home/tour/see');
}
}
看起来,我在重复我的代码,我的问题是,有没有办法一次复制所有代码?如何复制巡更属性中的所有请求属性?是的,您可以执行
$tour=request()->all()代码>以同时获取所有输入
或者你可以这样做:
$tour = new Tour;
$tour= save(request()->all());
创建一个类,该类从请求中获取所有属性并设置这些属性
class TourHydrator
public function updateFromRequest(Request $request, Tour $tour)
{
$tour->name = $request->name;
$tour->flight = $request->flight;
$tour->price = $request->price;
$tour->description = $request->description;
}
然后将其放入控制器中
class TourController extends Controller
{
/**
* @var TourHydrator
*/
private $tourHydrator;
public function __construct(TourHydrator $tourHydrator)
{
$this->tourHydrator = $tourHydrator;
}
public function store(Request $request, Tour $tour)
{
$this->tourHydrator->updateFromRequest($request, $tour);
$tour->save();
return redirect('home/tour/see');
}
public function update(Request $request)
{
$tour = Tour::find($request->id);
$this->tourHydrator->updateFromRequest($request, $tour);
$tour->save();
return redirect('home/tour/see');
}
}
我建议使用这种方法,而不是使用$request->all()
,因为请求可能会随着应用程序的发展而变化
例如,您还可以在控制器中添加以下内容:
try {
$this->tourHydrator->updateFromRequest($request, $tour);
$tour->save();
return redirect('home/tour/see');
} catch (SomeException $e) {
return redirect('home/tour/invalid');
}
我还建议在您的Tour
模型中使用gettest和setter,因为有时神奇的方法可能会很棘手,尤其是在测试时。然后您可以更改或以使用适当的设置器。您也可以尝试以下操作:
Tour::create($request->all());
更多
这使$tour成为一个数组,那么您不能在上调用$tour->save()it@AliSeyfi切卡根