定义可以在laravel 5中的多个控制器(简称库中)中使用的方法

Nik*_*wal 5 php dry laravel laravel-5.2

我想定义一些可以在多个地方或多个控制器中使用的方法.基本上这些方法将类似于将执行多个查询的库.

我的主要目标是通过创建一些库来避免多次编写通用逻辑.

请帮帮我.

提前致谢 :)

scr*_*bmx 6

取决于你想做什么。以下是一些选项:

默认情况下,您的所有控制器都扩展App\Http\Controllers\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);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是为业务逻辑创建一个服务类并将它们注入到构造函数或相关方法中

 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 存储库示例已在此处记录:https://laravel.com/docs/5.2/quickstart-intermediate#dependency-injection (2认同)