Как проверить метод контроллера Laravel? - PullRequest
0 голосов
/ 20 ноября 2018

Мой контроллер выглядит так:

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 на. Что вы думаете об этом, как я могу избежать этого.

1 Ответ

0 голосов
/ 20 ноября 2018

Или вы можете использовать функцию Eloquent Create, так что вам не нужно беспокоиться о конструкторе.

$language = Language::create($request->only(['name', 'code', 'flag']));

Эта функция вставит данные в базу данных и вернет модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...