laravel - 无法在自定义服务中获取请求数据?
问题描述
我有定制服务:
<?php
namespace App\Library\Services;
use Illuminate\Http\Request;
class RegisterCustomerService
{
private $request;
public function constructor(Request $request)
{
$this->request = $request;
}
public function register($role)
{
dd($this->request);
}
}
dd($this->request);
为什么我在执行 POST 请求时无法获取:
$customer = $registerCustomerService->register('customer');
我的服务提供商是:
class RegisterCustomerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register(Request $request)
{
$this->app->bind('App\Library\Services\RegisterCustomerService', function ($app) {
return new RegisterCustomerService($request);
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
解决方案
您不需要在容器中绑定实例,因为如果您通过容器解析对象,Laravel 可以自动解析命名空间和类依赖项。
您可以从服务提供者中删除绑定并使用:
$customer = app('App\\Library\\Services\\RegisterCustomerService')->register('customer');
通过这种方式,容器将解析注册客户服务,并使用所有需要的依赖项(您的示例中的请求对象)创建它。
推荐阅读
- swift - UIPageViewController 拖出屏幕
- react-native-firebase - react-native-firebase Crashlytics 不报告崩溃
- python - 如何返回除一列之外的所有二维数组?
- java - 跨 MVC 程序(JavaFX 应用程序)引用数组项
- python - 计算一行中的单词组(计算某些标题超过一个单词的列)
- botframework - 机器人有没有办法知道用户连接的是哪个频道?
- sql-server - 当所有输入都正确时,Powershell Restore-SQLDatabase 不起作用
- r - 如何评估对 match.call() 的调用?
- javascript - 发出 JavaScript (JS) 使用循环从 firebase 检索数据
- sql - 基于与 CTE 连接的更新列值