php - 定义可在 laravel 5 中的多个 Controller (简称库)中使用的方法

标签 php laravel laravel-5.2 dry

我想定义一些可以在多个地方或多个 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/

相关文章:

php - 如何在 Laravel 中修复 GET http ://localhost/storage/users/default. jpg 404(未找到)

laravel - 如何使用 cPanel 电子邮件帐户在 Laravel 中发送确认电子邮件?

PHP - 具有静态函数的初始化类

php - 无法让 Codeception 填写表单字段

php - Woocommerce 添加具有外部/附属类型的产品

ubuntu 10.10 中的 Php Cron 作业不会为 lampp 执行 - 需要帮助

php - Laravel 5.2 pdf mime 类型验证问题

php - 使用 composer 将 github 包安装到 Laravel 项目中

php - 根据时间更改div的背景颜色

php - 使用三元运算符的 echo 中的 if 语句