
सुरक्षा अनुसंधान और भेद्यता परीक्षण के लिए CVE-2022-46689 के माध्यम से फ़ॉन्ट अधिलेखन का प्रदर्शन करने वाला प्रूफ-ऑफ-कॉन्सेप्ट iOS शोषण।

लारावेल नोवा के लिए एक आसान और पूर्ण फ्लेक्सिबल फील्ड, बार-बार और लचीले फील्ड समूहों के लिए उपयुक्त।

यहाँ एक बहुत ही संक्षिप्त गाइड है जो आपको जल्द से जल्द शुरू करने में मदद करेगा। पूर्ण दस्तावेज़ देखें https://whitecube.github.io/nova-flexible-content पर
composer require whitecube/nova-flexible-content
एक फ्लेक्सिबल फील्ड फ़ील्ड समूहों को पुनरावर्ती और क्रमबद्ध तरीके से प्रबंधित करने की अनुमति देता है। लारावेल नोवा के लिए मौजूदा कुछ समाधानों के विपरीत, इस पर कोई प्रतिबंध नहीं है कि आप इन समूहों के अंदर किन फ़ील्ड का उपयोग कर सकते हैं। इसका मतलब है कि आप सभी लारावेल नोवा फ़ील्ड प्रकारों का उपयोग कर सकते हैं, साथ ही समुदाय द्वारा बनाए गए किसी भी फ़ील्ड का भी।
एक लेआउट फ़ील्ड के एक समूह का प्रतिनिधित्व करता है जिसे फ्लेक्सिबल फील्ड के अंदर दोहराया जा सकता है। आप जितने चाहें उतने लेआउट जोड़ सकते हैं। यदि केवल एक लेआउट परिभाषित किया गया है, तो फील्ड एक साधारण रिपीटर की तरह व्यवहार करेगा, और अधिक लेआउट जोड़ने पर आपको एक फ्लेक्सिबल कंटेंट मिलेगा। दोनों अवधारणाएं वर्डप्रेस के एसीएफ प्लगइन में उनके चचेरे भाइयों के समान हैं।
आप अपने फ्लेक्सिबल फील्ड पर निम्न विधि का उपयोग करके लेआउट जोड़ सकते हैं:
addLayout(string $title, string $name, array $fields)
$name पैरामीटर का उपयोग फील्ड के मान में चयनित लेआउट को संग्रहीत करने के लिए किया जाता है। इसे समझदारी से चुनें, आप शायद इसका उपयोग अपने एप्लिकेशन में लेआउट की पहचान करने के लिए करेंगे।
use Whitecube\NovaFlexibleContent\Flexible;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
return [
// ...
Flexible::make('Content')
->addLayout('Simple content section', 'wysiwyg', [
Text::make('Title'),
Markdown::make('Content')
])
->addLayout('Video section', 'video', [
Text::make('Title'),
Image::make('Video Thumbnail', 'thumbnail'),
Text::make('Video ID (YouTube)', 'video'),
Text::make('Video Caption', 'caption')
])
];
}

आप डिफ़ॉल्ट "Add layout" बटन का टेक्स्ट इस प्रकार बदल सकते हैं:
Flexible::make('Content')
->button('Add something amazing!');

यदि आप Laravel 6 और उससे नीचे का उपयोग कर रहे हैं, या कास्ट का उपयोग नहीं करना चाहते हैं, तो कृपया HasFlexible ट्रेट के साथ अपने मॉडल पर एक एक्सेसर का उपयोग करें।
Laravel 7 टेबल पर कस्टम कास्ट लाता है, और फ्लेक्सिबल कंटेंट फील्ड उनके लिए एकदम सही उपयोग मामला है। फील्ड अपने मूल्यों को एक एकल JSON स्ट्रिंग के रूप में संग्रहीत करता है, जिसका अर्थ है कि इस स्ट्रिंग को आपके एप्लिकेशन में उपयोग करने से पहले पार्स करने की आवश्यकता है। यह इस पैकेज में FlexibleCast वर्ग का उपयोग करके आसानी से किया जा सकता है:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Whitecube\NovaFlexibleContent\Value\FlexibleCast;
class MyModel extends Model
{
protected $casts = [
'flexible-content' => FlexibleCast::class
];
}
डिफ़ॉल्ट रूप से, FlexibleCast वर्ग बुनियादी Layout उदाहरणों को एकत्र करेगा। यदि आप लेआउट को कस्टम लेआउट उदाहरणों में मैप करना चाहते हैं, तो यह भी संभव है। पहले, php artisan flexible:cast MyFlexibleCast चलाकर एक कस्टम फ्लेक्सिबल कास्ट बनाएं। यह फ़ाइल को App\Casts निर्देशिका में बनाएगा।
फिर अपने कस्टम लेआउट वर्गों को उपयुक्त कुंजियों पर आसानी से मैप करें:
namespace App\Casts;
class MyFlexibleCast extends FlexibleCast
{
protected $layouts = [
'wysiwyg' => \App\Nova\Flexible\Layouts\WysiwygLayout::class,
'video' => \App\Nova\Flexible\Layouts\VideoLayout::class,
]
}
यदि आपको अधिक नियंत्रण की आवश्यकता है, तो आप इसके बजाय getLayoutMappings विधि को ओवरराइड कर सकते हैं।
FlexibleCast कास्ट और HasFlexible ट्रेट द्वारा लौटाए गए संग्रह मूल Illuminate\Support\Collection का विस्तार करते हैं। ये कस्टम लेआउट संग्रह एक find(string $name) विधि प्रदर्शित करते हैं जो दिए गए लेआउट $name वाले पहले लेआउट को लौटाता है।
लेआउट एक प्रकार के नकली मॉडल हैं। वे Laravel के HasAttributes ट्रेट का उपयोग करते हैं, जिसका अर्थ है कि आप लेआउट की विशेषताओं के लिए एक्सेसर और म्यूटेटर परिभाषित कर सकते हैं। इसके अलावा, निम्न विधियों का उपयोग करके लेआउट के गुणों तक पहुँचना भी संभव है:
name()लेआउट का नाम लौटाता है।
title()लेआउट का शीर्षक (जैसा कि Nova में दिखाया गया है) लौटाता है।
key()लेआउट की अद्वितीय कुंजी (लेआउट का अद्वितीय पहचानकर्ता) लौटाता है।
फ्लेक्सिबल कंटेंट फील्ड का उपयोग करते समय, आप जल्दी ही कुछ उपयोग मामलों का सामना करेंगे जहाँ ऊपर वर्णित मूल बातें पर्याप्त नहीं हैं। इसलिए हमने पैकेज को एक विस्तार योग्य तरीके से विकसित किया है, जिससे फील्ड और इसके आउटपुट में कस्टम व्यवहार और/या क्षमताओं को आसानी से जोड़ा जा सके।
कभी-कभी, addLayout परिभाषाएँ काफी लंबी हो सकती हैं, या हो सकता है कि आप चाहते हों कि वे अन्य Flexible फील्ड के साथ साझा की जाएँ। इसका उत्तर अपने लेआउट को उसके स्वयं के वर्ग में निकालना है। इस पर अधिक जानकारी के लिए दस्तावेज़ देखें।
पुन: प्रयोज्य लेआउट वर्गों के अलावा, आप अपने फ्लेक्सिबल फील्ड के लिए Preset वर्ग बनाकर एक कदम आगे बढ़ सकते हैं। ये आपको अपने पूरे फ्लेक्सिबल फील्ड को कहीं भी पुन: उपयोग करने की अनुमति देते हैं। वे आपके फ्लेक्सिबल फील्ड को गतिशील बनाना भी आसान बनाते हैं, उदाहरण के लिए यदि आप सशर्त रूप से लेआउट जोड़ना चाहते हैं। और अंतिम लेकिन कम नहीं, उनका एक अतिरिक्त लाभ यह भी है कि वे आपके Nova संसाधन वर्गों को साफ करते हैं, यदि आपके फ्लेक्सिबल फील्ड में बहुत सारी addLayout परिभाषाएँ हैं। इस पर अधिक जानकारी के लिए दस्तावेज़ देखें।
डिफ़ॉल्ट रूप से, फील्ड आपके मॉडल की तालिका पर एक JSON कॉलम का लाभ उठाता है। कुछ मामलों में, आप वास्तव में इस फील्ड का उपयोग करना चाहेंगे, लेकिन किसी कारण से JSON विशेषता सही रास्ता नहीं है। उदाहरण के लिए, आप मानों को किसी अन्य तालिका में संग्रहीत करना चाह सकते हैं (जिसका अर्थ है कि आप पारंपरिक BelongsToMany या HasMany फील्ड के बजाय फ्लेक्सिबल कंटेंट फील्ड का उपयोग करेंगे)। चिंता न करें, हमने आपको कवर किया है!