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

السؤال

نشر

أحاول بناء مشروع يستعمل 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
نشر

مرحبا أخى.

يمكنك إستخدام ال 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 مسبوقا بنقطة.

  • 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;
}

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...