我的控制器如下所示:
public function store(Request $request) {
$validateData = $request->validate([
'name' => 'required|unique:languages',
'code' => 'required|size:3',
'flag' => 'required|size:2'
]);
$language = new Language();
$language->name = $request->name;
$language->code = $request->code;
$language->flag = $request->flag;
$saveLanguage = $language->save();
if(!$saveLanguage){
return response()->json(['error'=>'Something went wrong, please try later.'],500);
}
return response()->json(['success'=>'Language has been created successfully', 'data'=>$language],200);
如您所见,我正在实例化一个新的Language对象,并且一切正常,但是第一个问题是,假设我将来更改Language类(例如:您必须在构造函数中传递2个参数),我必须更改此控制器并我要实例化
Language
对象的所有其他控制器。第二个问题是我做不到,或者测试这个控制器太难了。
我很好奇在laravel中解决此问题的最佳解决方案是什么?
例如,对于我在控制器中使用的每个模型,使用简单的工厂或工厂方法模式是一个很好的解决方案。
我认为当您在其他类中编写类似
$var = new SomeClass()
的内容时,此otherClass
取决于SomeClass,并且当您要更改SomeClass
时必须将otherClass
更新为。您如何看待这一点,我该如何避免。 最佳答案
或者您可以使用Eloquent Create
函数,这样就不必担心构造函数。
$language = Language::create($request->only(['name', 'code', 'flag']));
该函数将数据插入数据库并返回模型。
关于php - 如何测试laravel Controller 方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53388883/