我的控制器如下所示:

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/

10-09 20:25
查看更多