লারাভেলে অ্যারে কীভাবে বৈধ করবেন?


112

আমি লারাভেলে অ্যারে POST যাচাই করার চেষ্টা করছি:

$validator = Validator::make($request->all(), [
            "name.*" => 'required|distinct|min:3',
            "amount.*" => 'required|integer|min:1',
            "description.*" => "required|string"

        ]);

আমি পোস্টটি খালি এবং এই পেতে পাঠাতে if ($validator->fails()) {}যেমন False। এর অর্থ হ'ল বৈধতা সত্য, তবে তা নয়।

লারাভেলে অ্যারে কীভাবে বৈধ করবেন? যখন আমি সাথে ফর্ম জমা দিনinput name="name[]"

উত্তর:


260

অ্যারাস্টিক প্রতীক (*) অ্যারেতে মানগুলি পরীক্ষা করতে ব্যবহৃত হয় , অ্যারে নিজেই নয়।

$validator = Validator::make($request->all(), [
    "names"    => "required|array|min:3",
    "names.*"  => "required|string|distinct|min:3",
]);

উপরের উদাহরণে:

  • "নামগুলি" অবশ্যই কমপক্ষে 3 টি উপাদান সহ একটি অ্যারে হতে হবে,
  • "নামগুলি" অ্যারের মানগুলি পৃথক (অনন্য) স্ট্রিং হতে হবে, কমপক্ষে 3 টি অক্ষর দীর্ঘ।

সম্পাদনা: লারাভেল 5.5 যেহেতু আপনি অনুরোধ অবজেক্টটিতে সরাসরি বৈধ () পদ্ধতিটি কল করতে পারেন:

$data = $request->validate([
    "name"    => "required|array|min:3",
    "name.*"  => "required|string|distinct|min:3",
]);

4
ব্যবহার করে দেখুন ধরা এটা স্থাপন করতে যদি আপনি ব্যবহার করছেন মনে রাখবেন $request->validate([...])। ডেটা বৈধতা ব্যর্থ হলে একটি ব্যতিক্রম উত্থাপিত হবে।
daisura99

নির্দিষ্ট ক্ষেত্রের ত্রুটি বার্তাটি কীভাবে পাবেন? যেমন আমার নামের 2 টি ক্ষেত্র রয়েছে এবং তারপরে এটি দ্বিতীয় ক্ষেত্রের মধ্যে কেবল ত্রুটি রয়েছে, আমি কীভাবে এটি অর্জন করতে পারি?
Eem Jee

'নাম। *' এ প্রয়োজনীয় প্রয়োজন নেই কারণ এটি বিদ্যমান থাকলে কেবলমাত্র এটি বৈধতা দেয়
বেন গুডিং

41

এইচটিএমএল + ভ্যু.জেএস ডেটা গ্রিড / টেবিল থেকে আমার অনুরোধ ডেটা হিসাবে এই অ্যারেটি রয়েছে:

[0] => Array
    (
        [item_id] => 1
        [item_no] => 3123
        [size] => 3e
    )
[1] => Array
    (
        [item_id] => 2
        [item_no] => 7688
        [size] => 5b
    )

এবং যা সঠিকভাবে কাজ করে যাচাই করতে এটি ব্যবহার করুন:

$this->validate($request, [
    '*.item_id' => 'required|integer',
    '*.item_no' => 'required|integer',
    '*.size'    => 'required|max:191',
]);

4
এটি ঠিক আমার প্রয়োজন জিনিস ধরণের!
ক্রিস স্টেজ

19

বৈধতা এবং অনুমোদনের যুক্তি লেখার প্রস্তাবিত উপায় হ'ল যুক্তিটিকে পৃথক অনুরোধ শ্রেণিতে স্থাপন করা। এইভাবে আপনার নিয়ামক কোডটি পরিষ্কার থাকবে।

আপনি এক্সিকিউট করে একটি অনুরোধ ক্লাস তৈরি করতে পারেন php artisan make:request SomeRequest

প্রতিটি অনুরোধ শ্রেণীর rules()পদ্ধতিতে আপনার বৈধতা বিধিগুলি সংজ্ঞায়িত করুন:

//SomeRequest.php
public function rules()
{
   return [
    "name"    => [
          'required',
          'array', // input must be an array
          'min:3'  // there must be three members in the array
    ],
    "name.*"  => [
          'required',
          'string',   // input must be of type string
          'distinct', // members of the array must be unique
          'min:3'     // each string must have min 3 chars
    ]
  ];
}

আপনার নিয়ামকটিতে আপনার রুট ফাংশনটি এভাবে লিখুন:

// SomeController.php
public function store(SomeRequest $request) 
{
  // Request is already validated before reaching this point.
  // Your controller logic goes here.
}

public function update(SomeRequest $request)
{
  // It isn't uncommon for the same validation to be required
  // in multiple places in the same controller. A request class
  // can be beneficial in this way.
}

প্রতিটি অনুরোধ শ্রেণি প্রাক- এবং উত্তর-বৈধকরণ হুক / পদ্ধতি নিয়ে আসে যা ব্যবসায় যুক্তি এবং বিশেষ ক্ষেত্রেগুলির ভিত্তিতে অনুরোধ শ্রেণীর স্বাভাবিক আচরণটি পরিবর্তন করার জন্য কাস্টমাইজ করা যেতে পারে।

অনুরূপ অনুরোধের (যেমন webএবং api) অনুরোধগুলির জন্য আপনি পিতামাতার অনুরোধ ক্লাস তৈরি করতে পারেন এবং তারপরে এই প্যারেন্ট ক্লাসগুলিতে কিছু সাধারণ অনুরোধ যুক্তি যুক্ত করতে পারেন।


6

কিছুটা জটিল তথ্য, @ লরান এবং @ নিসাল গুণাওয়ার্দনার উত্তরগুলির মিশ্রণ

[ 
   {  
       "foodItemsList":[
    {
       "id":7,
       "price":240,
       "quantity":1
                },
               { 
                "id":8,
                "quantity":1
               }],
        "price":340,
        "customer_id":1
   },
   {   
      "foodItemsList":[
    {
       "id":7,
       "quantity":1
    },
    { 
        "id":8,
        "quantity":1
    }],
    "customer_id":2
   }
]

বৈধতা রুল হবে

 return [
            '*.customer_id' => 'required|numeric|exists:customers,id',
            '*.foodItemsList.*.id' => 'required|exists:food_items,id',
            '*.foodItemsList.*.quantity' => 'required|numeric',
        ];

4

আপনাকে এখানে বর্ণিত ইনপুট অ্যারেটি লুপ করতে হবে এবং প্রতিটি ইনপুটের জন্য নিয়ম যুক্ত করতে হবে: লুপ ওভার রুলস

এখানে আপনার কয়েকটি কোড রয়েছে:

$input = Request::all();
$rules = [];

foreach($input['name'] as $key => $val)
{
    $rules['name.'.$key] = 'required|distinct|min:3';
}

$rules['amount'] = 'required|integer|min:1';
$rules['description'] = 'required|string';

$validator = Validator::make($input, $rules);

//Now check validation:
if ($validator->fails()) 
{ 
  /* do something */ 
}

9
এটি করার দরকার নেই - লারাভেল ডকস
ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.