我想定义一些可以在多个地方或多个 Controller 中使用的方法。基本上,这些方法就像将执行多个查询的库。
我的主要目标是通过创建一些库来避免多次编写通用逻辑。
请帮帮我。
提前致谢:)
最佳答案
取决于你想做什么。以下是一些选项:
默认情况下,所有 Controller 都扩展 App\Http\Controllers\Controller
类。只需将 Controller 之间的所有共享逻辑放在那里。
对于对数据库的复杂查询,您可以创建一个存储库并注入(inject) Controller 。
class UserRepository {
public function getActiveUsers() {
return Users::with('role')
->where('...')
->someQueryScopes()
->anotherQueryScope()
->yetAnotherScope();
}
}
class SomeController extends Controller {
public function index(UserRepository $repository) {
$users = $repository->getActiveUsers();
return view('users.index')->withUsers($users);
}
}
另一种选择是为业务逻辑创建一个服务类,并将它们注入(inject)到构造函数或相关方法中
class UserCreatorService {
public function create($email, $password){
$user = User::create(['email' => $email, 'password' => $password]);
$user->addRole('Subscriber');
Event::fire(new UserWasCreated($user));
return $user;
}
}
class RegisterController extends Controller {
public function store(Request $request, UserCreatorService $service) {
$user = $service->create($request->input('email'), $request->input('password'));
return view('home')->withUser($user);
}
}
关于php - 定义可在 laravel 5 中的多个 Controller (简称库)中使用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37706938/