我不知道這是我的睡眠不足還是缺少明顯的東西,但是我遇到了這個問題:我創(chuàng)建了一個自定義驗證規(guī)則,我需要通過構(gòu)造函數(shù)傳遞一個請求值以執(zhí)行驗證。這是我的設(shè)置:自定義驗證規(guī)則/** Rules/RouteValidationRule.php */namespace App\Rules;use Illuminate\Contracts\Validation\Rule;class RouteValidationRule implements Rule { private $action; public function __construct(string $action) { $this->action = $action; // doing dd($action) output the correct value. } // a dd('Hi'); inside here is just ignored: public function passes($attribute, $value) { if ($this->action === 'complete') return (isset($value['delivery_route'])) && (count($value['delivery_route']) >= 2); else return true; } public function message() { /** */ }}表格申請/** UpdateOrderRequest.php */namespace App\Http\Requests;use App\Rules\OrderStatusesRule;use App\Rules\RouteValidationRule;use Illuminate\Foundation\Http\FormRequest;class UpdateOrderRequest extends FormRequest { public function authorize() { /** */ } public function rules() { return [ 'action' => ['required', new OrderStatusesRule], 'meta.delivery_route' => [ 'array', new RouteValidationRule($this->get('action')), // <--- ], ]; }}但事實是,該值已到達(dá)自定義規(guī)則構(gòu)造函數(shù),但沒有到達(dá)該passes()方法,它只是忽略了這一點,就好像可以繼續(xù)進(jìn)行一樣。PD:我已經(jīng)檢查了每個步驟dd()。提前致謝。更新/** MyController.php */ /** * @param UpdateOrderRequest $request * @return mixed */ public function handle(UpdateOrderRequest $request) // the RequestForm is injected { dd('I passed'); // <-- is reaching this statement when it shouldn't }
2 回答

翻過高山走不出你
TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊
您的規(guī)則無法運(yùn)行的原因是,您要測試的屬性不在Request
或null中。如果你想運(yùn)行規(guī)則無論是現(xiàn)在還是不行,有您的規(guī)則執(zhí)行ImplicitRule
不Rule
如:
class RouteValidationRule implements ImplicitRule {
- 2 回答
- 0 關(guān)注
- 182 瀏覽
添加回答
舉報
0/150
提交
取消