Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Observer laravel的访问表单请求_Php_Laravel_Eloquent_Orm_Model - Fatal编程技术网

Php Observer laravel的访问表单请求

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-

我正在尝试清理我的控制器。我有很多表单字段,所以我想使用observer插入与主模型有关系的其他模型

我已经成功地将请求插入到控制器中的数据库中,但它似乎又长又重。请参阅下面的代码

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...
    }
}