Php Observer laravel的访问表单请求
我正在尝试清理我的控制器。我有很多表单字段,所以我想使用observer插入与主模型有关系的其他模型 我已经成功地将请求插入到控制器中的数据库中,但它似乎又长又重。请参阅下面的代码Php Observer laravel的访问表单请求,php,laravel,eloquent,orm,model,Php,Laravel,Eloquent,Orm,Model,我正在尝试清理我的控制器。我有很多表单字段,所以我想使用observer插入与主模型有关系的其他模型 我已经成功地将请求插入到控制器中的数据库中,但它似乎又长又重。请参阅下面的代码 function insert(Request $request){ $bankStatementName = time().'.'.request()->bankStatement->getClientOriginalExtension(); request()->bankStatement-
function insert(Request $request){
$bankStatementName = time().'.'.request()->bankStatement->getClientOriginalExtension();
request()->bankStatement->move(public_path('bankStatement'), $bankStatementName);
$identityName = time().'.'.request()->identity->getClientOriginalExtension();
request()->identity->move(public_path('identity'), $identityName);
$passportName = time().'.'.request()->passport->getClientOriginalExtension();
request()->passport->move(public_path('passport'), $passportName);
$customer = Customer::find(Auth::user()->id);
$relations = new Customer_relationship([
'kinName' => $request->kinName,
'kinGender' => $request->kinGender,
'kinEmail' => $request->kinEmail,
'kinRelation' => $request->kinRelation,
'kinAddress' => $request->kinAddress
]);
$company = new Customer_company([
'compName' => $request->compName,
'compEmail' => $request->compEmail,
'compPhone' => $request->compPhone,
'compAddress' => $request->compAddress
]);
$bank = new Customer_bank([
'accNumber' => $request->accNumber,
'bankName' => $request->bankName,
'accName' => $request->accName
]);
$document = new Customer_document([
'identity' => $identityName,
'bankStatement' => $bankStatementName,
'passport' => $passportName
]);
$customer->relation()->save($relations);
$customer->company()->save($company);
$customer->bank()->save($bank);
$customer->document()->save($document);
Customer::where('user_id', Auth::user()->id)
->update([
'title' => $request->title,
'middlename' => isset($request->middlename) ? $request->middlename : "",
'phone' => $request->phone,
'gender' => $request->gender,
'DOB' => $request->DOB,
'marital' => $request->marital,
'residential_address' => $request->residential_address,
'city' => $request->city,
'state' => $request->state,
'lga' => $request->lga,
'nationality' => $request->nationality,
'complete_registration' => 1 ]);
}
因此,我如何从observer的更新函数访问表单请求字段以进行控制器清理欢迎使用So
如果你想在这里使用观察者,你应该从阅读和开始
如果您拥有父模型上所需的所有数据,这可能会起作用,因为您只需将该模型传递到由观察者触发的作业中。如果不是,那么观察员/工作可能不是您的最佳解决方案。相反,我可能会创建某种服务,您可以将创建这些关系的责任转移到这里。这样,您可以保持一个干净的控制器级别,该级别只调用服务来创建模型,然后返回结果
例如:
namespace App\Http\Controllers;
use App\Models\Something\SomeService;
class SomeController extends Controller
{
/**
* @var SomeService
*/
private $someService;
public function __construct(SomeService $someService)
{
$this->someService = $someService;
}
public function store()
{
$request = request();
$name = $request->input('name');
$something = $this->someService->create($name);
return response()->json(['data' => $something]);
}
}
这是一个我将如何做的简化示例。希望对你有点帮助
如果您仍然希望使用作业来处理此问题,那么我仍然不认为观察员是适合您的解决方案,因为这些都是在模型事件上触发的,例如创建的
。这意味着您当时将无权访问请求对象,而只能访问已创建的(模型)。相反,您可以直接从控制器/服务分派作业。这些都在我在答案顶部发布的队列链接中进行了描述。您是否尝试在更新功能中键入提示Request$Request
?谢谢,我实际上在控制器中创建了一个方法,稍后在主方法中使用它
namespace App\Models\Something;
class SomeService
{
public function create(string $name): Something
{
// Do whatever in here...
}
}