Здравствуйте, прочитал книгу "Разработка через тестирование" Кент Бек. Пытаюсь тренироваться на контроллерах Laravel админ панели. Так как, они у меня Restful и тут смешивается представление с логикой, к примеру "edit" я не могу проверить возвращаемые данные, они передаются сразу в представление. Как лучше протестировать такой метод? Как я понял, TDD плотно базируется на принципах SOLID, а первый принцип гласит "Принцип единственной ответственности", поэтому я думаю, может лучше разделить контроллер на две части: 1. Представление, которое будет принимать данные и передовать в метод view(), 2. Сама логика, с методами create, update, delete, edit. Подскажите пожалуйста как правильно сделать, не хочеться переписывать по 5 раз.
<?php
namespace App\Http\Controllers\Admin;
use Validator;
use Illuminate\Http\Request;
use App\Http\Interfaces\Admin\RestInterface;
class UserController extends AdminController implements RestInterface
{
public function index()
{
$data = [
'title' => 'Список пользователей'
];
return view('admin.users.list', $data);
}
public function show()
{
$data = [
'title' => 'Добавить пользователя'
];
return view('admin.users.single', $data);
}
public function edit($id)
{
$v = Validator::make(['id' => $id], [
'id' => 'required|integer'
]);
if($v->fails()){
return redirect('/', 303);
}
$user = $this->repository->getOne($id);
$data = [
'title' => 'Пользователь',
'user' => $user
];
return view('users.admin.single', $data);
}
public function create(Request $request)
{
$v = Validator::make($request->all(), [
'name' => 'required|string|max:50',
'email' => 'required|email|max:30',
'password' => 'required|string|max:30'
]);
if($v->fails()){
return response()->json($v->errors());
}
$this->repository->create($request->all());
return true;
}
public function update($id, Request $request)
{
$v = Validator::make($request->all(), [
'name' => 'required|string|max:50',
'email' => 'required|email|max:30',
'password' => 'required|string|max:30'
]);
if($v->fails()){
return response()->json($v->errors());
}
$this->repository->update($id, $request->all());
return true;
}
public function delete($id)
{
$this->repository->delete($id);
return true;
}
public function filter(Request $request)
{
$this->validate($request, [
'name' => 'string|max:30',
'email' => 'string|max:30'
]);
$filter = $this->repository->filter($request->all());
return response()->json($filter);
}
public function getEntity(){
return '\App\Entities\Users';
}
}