我正在使用Lumen开发我的第一个API。通常我会使用服务来将业务逻辑或可重用代码与控制器分离,并与其他控制器共享。
如何在Lumen中实现这个功能?在哪里放置这些服务?我只看到了ServiceProviders注册这些服务,但对于我来说并不清楚在哪里以及如何定义它们。
我正在使用Lumen开发我的第一个API。通常我会使用服务来将业务逻辑或可重用代码与控制器分离,并与其他控制器共享。
如何在Lumen中实现这个功能?在哪里放置这些服务?我只看到了ServiceProviders注册这些服务,但对于我来说并不清楚在哪里以及如何定义它们。
服务作为服务类?服务类不是框架的一部分,这更像是您正在尝试解决的应用程序架构问题。
根据您正在开发的项目,可以选择将服务文件夹放在应用程序文件夹中(如果您选择按类型结构的文件夹)或所属功能文件夹中(如果您选择按功能样式的应用程序文件夹)。这只是许多可能的文件夹结构中的两种。
对于每个项目都不同,因此由您决定将服务类放在何处以及如何构建应用程序。
请记住,在整个项目开发周期中坚持一种惯例。如果您现在想不出来,请在重构会话中稍后构建您的类。当我在处理其他事情而不是在开始时进行思考时,我通常会有更多想法。
app
函数:
$instance = app(Something::class);
这是为了"解析东西"。注册"东西"是服务提供者所用的。服务提供者只是扩展Illuminate\Support\ServiceProvider
类并将接口或类绑定到具体实现的类。(阅读文档了解如何编写自己的详细信息。)
例子: 创建一些测试路由:
$app->get('/test', 'TestController@test');
并创建控制器方法,对参数进行类型提示:
public function test(DatabaseManager $dbm)
{
dd($dbm);
}
/bootstrap/app.php
中设置,如下所示:
$app->register(App\Providers\AuthServiceProvider::class);
(否则,如果你请求一个没有被提供者绑定的类,框架就会注入该类的一个新实例。)
// app/Repositories/ProductRepository.php
private $db;
public function __construct(DatabaseManager $dbm)
{
$this->db = $dbm->connection();
}
public function findById($id)
{
return $this->db->table('products')->where('id', '=', $id)->get();
}
//routes.php
$app->get('products/{id}', 'ProductsController@show');
//ProductsController.php
public function show(ProductRepository $repo, $id)
{
$product = $repo->findById($id);
dd($product);
}