
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 फील्ड के बजाय फ्लेक्सिबल कंटेंट फील्ड का उपयोग करेंगे)। चिंता न करें, हमने आपको कवर किया है!
अपना स्वयं का रिज़ॉल्वर वर्ग बनाकर फील्ड को बताएं कि अपनी सामग्री को कैसे संग्रहीत और पुनर्प्राप्त करना है, जिसमें मूल रूप से केवल दो सरल विधियाँ होती हैं: get और set। इस पर अधिक जानकारी के लिए दस्तावेज़ देखें।
हो सकता है कि आपने हमारे अन्य पैकेजों में से एक के बारे में सुना हो, nova-page, जो एक Nova टूल है जो स्थिर पृष्ठों जैसे कि "हमारे बारे में" पृष्ठ (या समान) को व्यक्तिगत रूप से मॉडल घोषित किए बिना संपादित करने की अनुमति देता है। अक्सर, फ्लेक्सिबल कंटेंट फील्ड काम आता है। चिंता न करें, दोनों पैकेज एक साथ अच्छी तरह से काम करते हैं! पहले एक nova page टेम्पलेट बनाएं और टेम्पलेट के फील्ड में एक फ्लेक्सिबल कंटेंट जोड़ें।
जैसा कि दस्तावेज़ में समझाया गया है, आप अपने ब्लेड दृश्यों में {{ Page::get('attribute') }} का उपयोग करके nova-page की स्थिर सामग्री तक पहुँच सकते हैं। इस तरह फ्लेक्सिबल कंटेंट का अनुरोध करने पर, यह एक कच्ची JSON स्ट्रिंग लौटाता है जो फ्लेक्सिबल कंटेंट का वर्णन करती है, जो निश्चित रूप से बहुत उपयोगी नहीं है। इसके बजाय, आप अपने पेज टेम्पलेट्स पर बस Whitecube\NovaFlexibleContent\Concerns\HasFlexible ट्रेट लागू कर सकते हैं, जो Page::flexible('attribute') फेसेड विधि को उजागर करेगा और फ्लेक्सिबल कंटेंट के रूपांतरण का ध्यान रखेगा।
namespace App\Nova\Templates;
// ...
use Whitecube\NovaFlexibleContent\Concerns\HasFlexible;
class Home extends Template
{
use HasFlexible;
// ...
}
यदि आप अपने उत्पादन अनुप्रयोगों में इस पैकेज पर निर्भर हैं, तो हमें प्रायोजित करने पर विचार करें! यह हमें वह करने में मदद करने का सबसे अच्छा तरीका है जो हमें पसंद है: बेहतरीन ओपन सोर्स सॉफ्टवेयर बनाना।
बेझिझक बदलाव सुझाएं, नई सुविधाओं का अनुरोध करें या स्वयं बग ठीक करें। हमें यकीन है कि अभी भी बहुत सारे सुधार किए जा सकते हैं, और हम उपयोगी पुल अनुरोधों को मर्ज करके बहुत खुश होंगे।
धन्यवाद!
नई सुविधा जोड़ते समय या बग ठीक करते समय, कृपया संबंधित इकाई परीक्षण जोड़ें। परीक्षणों का वर्तमान सेट सीमित है, लेकिन जोड़ा गया प्रत्येक इकाई परीक्षण पैकेज की गुणवत्ता में सुधार करेगा।
composer test कॉल करके PHPUnit चलाएं।
Whitecube में हम अपने दैनिक कार्य के भाग के रूप में बहुत सारे ओपन सोर्स सॉफ्टवेयर का उपयोग करते हैं। इसलिए जब हमारे पास कुछ वापस देने का अवसर होता है, तो हम बहुत उत्साहित होते हैं!
हमें उम्मीद है कि आप हमारे इस छोटे से योगदान का आनंद लेंगे और यदि आप इसे अपनी परियोजनाओं में उपयोगी पाते हैं तो हमसे सुनना पसंद करेंगे। अधिक अपडेट के लिए हमें Twitter पर फॉलो करें!