【问题标题】:Access form request from Observer laravel来自观察者 laravel 的访问表单请求
【发布时间】:2019-08-17 08:52:31
【问题描述】:

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

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

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 ]);

}

那么如何从观察者的更新功能访问表单请求字段以进行控制器清理

【问题讨论】:

  • 您是否尝试在更新功能中输入提示Request $request

标签: php laravel eloquent orm model


【解决方案1】:

欢迎来到 SO!

如果你想在这里使用观察者,你应该先阅读https://laravel.com/docs/5.8/eloquent#observershttps://laravel.com/docs/5.8/queues

如果您的父模型拥有所需的所有数据,这可能会起作用,因为您只需将该模型传递给观察者触发的作业。如果不是,那么观察者/工作可能不是您情况的最佳解决方案。相反,我可能会创建某种服务,您可以在其中转移创建这些关系的责任。这样你就可以保持一个干净的控制器级别,它只调用一个服务来创建模型,然后返回结果。

这方面的一个例子可能是:

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]);
    }
}
namespace App\Models\Something;

class SomeService
{
    public function create(string $name): Something
    {
        // Do whatever in here...
    }
}

这是一个简化的示例,说明我将如何做到这一点。希望对你有所帮助。

如果您仍想使用工作来处理此问题,那么我仍然认为观察者不是适合您的解决方案,因为它们是在模型事件上触发的,例如 created。这意味着您当时将无权访问请求对象,而只能访问已创建(模型)。相反,您可以直接从控制器/服务分派作业。这一切都在我发布在答案顶部的队列链接中进行了描述。

【讨论】:

  • 谢谢我实际上在控制器中创建了一个方法,后来在主方法中使用它
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多