控制器中的laravel验证器似乎无法正常工作

时间:2019-04-04 18:18:23

标签: laravel

我的销售控制器中的validate()函数似乎无法正常工作,我正在将其与其他控制器进行比较,看起来它应该可以工作,但不能正常工作。看起来好像validate()被绕过了。这是我的控制器

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class SalesController extends Controller
{
    public function store(Request $request)
    {
        $this->validate($request, [
            'user_id' => 'required',
            'status_id' => 'required',
            'currency_id' => 'required',
            'company_id' => 'required',
            'invoice_no' => 'nullable',
            'notes' => 'nullable',
            'admin_notes' => 'nullable',
            'due_date' => 'nullable',
            'publish' => 'nullable',
            'product_id' => 'required|min:1',
            'product_code' => 'required|min:1',
            'product_name' => 'required|min:1',
            'quantity' => 'required'
        ]);


         $sales = $request->only(
            'user_id',
            'status_id',
            'currency_id',
            'currency_rate',
            'due_date',
            'company_id',
            'invoice_no',
            'notes',
            'admin_notes',
            'delivery_date',
            'publish'
        );
        $sales['grandtotal'] = (float) str_replace(',', '', $request->grandtotal);
        $sales['grandtotalcost'] = (float) str_replace(',', '', $request->grandtotalcost);
        $sales = Sales::create($sales);

        $input = $request->all();
        for($i=0; $i<= count($input['quantity']); $i++) {
        if(empty($input['quantity'][$i]) || !is_numeric($input['quantity'][$i])) continue;
            $items = [ 
                'sales_id' => $sales->id,
                'product_id' => $input['product_id'][$i],
                'product_code' => $input['product_code'][$i],
                'product_name' => $input['product_name'][$i],
                'price' => $input['price'][$i],
                'cost' => $input['cost'][$i],
                'quantity' => intval($input['quantity'][$i]),
                'total_price' => (float) str_replace(',', '', $input['total_price'][$i]),
                'total_cost' => (float) str_replace(',', '', $input['total_cost'][$i]),
            ];

            Salesitems::create($items);
        }

        // $ponumbers = Ponumbers::create($request->only('purchase_no'));
        $invnum = $request->all();
        $invnumbers = new Invnumbers;
        $invnumbers->sales_num = $invnum['invoice_no'];
        $invnumbers->save();

        if ($request){
            Session::flash('message','Invoice was successfully added');
            Session::flash('m-class','alert-success');
        } else {
            Session::flash('message','Data is not saved');
            Session::flash('m-class','alert-danger');
            return redirect()->route('sales.index');
        }
        return redirect()->route('sales.index');
    }
}

我的剑灵

<input class="form-control autocomplete_txt product_name" type='text' data-type="product_name" id='product_name_1' name='product_name[]' for="1" readonly/>
@if ($errors->has('product_name')) <p class="help-block">{{ $errors->first('product_name') }}</p> @endif

如果我使用产品名称提交表单,而不是从验证中抛出错误,则

enter image description here

2 个答案:

答案 0 :(得分:2)

通过查看您的代码,在我看来,您的product_id应该是一个数组。因此验证应为:

'product_id' => 'array|required|min:1',

'product_id.*' => 'required',

代替

'product_id' => 'required|min:1',

答案 1 :(得分:0)

尝试使用$request->validate([...代替$this->validate($request, [...。我不确定您的控制器中是否有validate ...