اذهب إلى المحتوى

السؤال

نشر

أحاول بناء مشروع يستعمل RESTful API وأحصل على الطلب request التالي:

{
   "api_key" :"123456789",
   "tags" : "laravel,php",
   "posts": [
     {
          "title":"post 1 title",
          "content":"some long content here ...", 
          "additional_tags":"logic,programming"
     },
     {
          "title":"post 2 title",
          "content":"some long content here ...", 
          "additional_tags":"logic,programming"
     },
     {
          "title":"post 3 title",
          "content":"some long content here ...", 
          "additional_tags":"logic,programming"
     },
   ]
}

يمكنني التحقق من أغلب عناصر الطلب السابق:

[
  'api_key' => 'required|integer',
  'tags' => 'required',
  // ...
]

لكن لا أعرف كيف أضع قواعد rules للتحقق من الحقول title و content و additional_tags، حيث لا أعرف طريقة لتحديد الحقول من داخل مصفوفة.

كيف يمكنني تحديد الحقل title على سبيل المثال في كل منشور من المصفوفة posts؟

Recommended Posts

  • 1
نشر

في حالة تشعب اكثر من مصفوفة عن خاصية ما، يمكنك استعمال السياق parent.*.child للمرور على كامل عناصر كل مصفوفة، بشكل يمكننا من التحقق من كل خاصية كـ:

"posts.*.title": 'required',
"posts.*.content": 'required',
"posts.*.additional_tags": 'required'

في النسخ الأقدم من لارافيل قد لا يكون هذا الخيار متاحا، يمكنك على كل حال الاستعانة بتكرارة foreach لتكوين مصفوفة قواعد ومقاربة نفس النتيجة، نستعمل FormRequest مثلا كـ:

public function rules()
{
    $rules = [
        'api_key' => 'required|integer',
        'tags' => 'required',
    ];
    foreach($this->request->get('posts') as $key => $val){
        $rules['posts.'.$key.'.title'] = 'required';
        $rules['posts.'.$key.'.content'] = 'required';
        $rules['posts.'.$key.'.additional_tags'] = 'required';
    }
    return $rules;
}
  • 1
نشر

مرحبا أخى.

يمكنك إستخدام ال validation بهذه الطريقة

{
  'api_key'  => 'required|integer',
  'tags'     => 'required',
  'posts'    => 'required|array|min:1|max:20',
  'posts.title'  => 'required|string|min:5',
  'posts.content'  => "required|string|min:5',
}

حيث يمكنك التحقق من أى عنصر متداخل عن طريق وضعه بعد ال parent مسبوقا بنقطة.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...