亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自觀察者 laravel 的訪問表單請求

來自觀察者 laravel 的訪問表單請求

PHP
喵喵時光機 2021-11-26 16:51:14
我正在嘗試清理我的控制器。我有很多表單字段,所以我想使用觀察者為與主模型有關系的其他模型插入我已經成功地將請求插入到控制器中的數據庫中,但它似乎又長又重??聪旅娴拇afunction 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);}那么如何從觀察者的更新功能訪問表單請求字段以進行控制器清理
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

歡迎來到 SO!


如果你想在這里使用觀察者,你應該首先閱讀https://laravel.com/docs/5.8/eloquent#observers和https://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. 這意味著你在那個時候將無法訪問請求對象,而只是被創建(模型)。相反,您可以直接從控制器/服務分派作業。我在答案頂部發布的隊列鏈接中對此進行了全部描述。


查看完整回答
反對 回復 2021-11-26
  • 1 回答
  • 0 關注
  • 201 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號