लार्वा में एक अनुरोध पैरामीटर के मूल्य को कैसे बदलना है


94

मुझे अपने अनुरोध पैरामीटर के मूल्य को इस तरह बदलना होगा:

$request->name = "My Value!";

मैं इस कोड का उपयोग करता हूं लेकिन काम नहीं करता है:

$request->offsetSet('img', $img);

1
लारवेल परिवर्तन इनपुट मूल्य के संभावित डुप्लिकेट - जवाब शीर्ष प्रश्न के लिए टिप्पणी में है।
जोएल हिंज़

जवाबों:


57

उपयोग करें merge():

$request->merge([
    'user_id' => $modified_user_id_here,
]);

सरल! संपूर्ण $request->all()को दूसरे चर में स्थानांतरित करने की आवश्यकता नहीं है ।


186

की कोशिश:

$requestData = $request->all();
$requestData['img'] = $img;

इसे करने का दूसरा तरीका:

$request->merge(['img' => $img]);

इसके लिए @JoelHinz को धन्यवाद।

यदि आप नेस्टेड डेटा जोड़ना या अधिलेखित करना चाहते हैं:

$data['some']['thing'] = 'value';
$request->merge($data);

यदि आप Request $requestऑब्जेक्ट को इंजेक्ट नहीं करते हैं , तो आप इसके बजाय वैश्विक request()सहायक या \Request::मुखौटा का उपयोग कर सकते हैं$request


त्रुटि: अपरिभाषित विधि पर कॉल करें प्रबुद्ध \ Http \ Request :: put ()
मोर्टेज़ा नेगाही

put () एक संग्रह विधि है, $ अनुरोध-> सभी () एक सरणी देता है।
जोएल हिंज

3
अनुरोध ऑब्जेक्ट वास्तव में प्रतिस्थापित () और मर्ज () विधियाँ हैं। मैं आम तौर पर उन का उपयोग करना पसंद करते हैं। इस बारे में SO के उत्तर के लिए प्रश्न पर मेरी टिप्पणी देखें।
जोएल हिंज़

@JoelHinz, मैंने सोचा कि वे लारवेल 5 में काम नहीं करते हैं, क्योंकि मैंने कुछ पोस्ट देखीं, जहां लोगों को इन तरीकों का उपयोग करने में परेशानी हुई। लेकिन मैंने RequestL5 के स्रोत कोड पर ध्यान दिया है और मैं इन विधियों को देख सकता हूं। धन्यवाद।
एलेक्सी मेजिनिन

4
पसीनारहित। हालांकि आपका जवाब अभी भी गलत है। प्रतिस्थापित () विधि पूरे इनपुट को बदल देती है - आपको विलय करने की आवश्यकता है () यदि आप केवल एक मान को बदलना चाहते हैं।
जोएल हिंज

8

यदि आपको अनुरोध को अनुकूलित करने की आवश्यकता है

$data = $request->all();

आप फ़ील्ड का नाम और मान पास कर सकते हैं

$data['product_ref_code'] = 1650;

और अंत में नया अनुरोध पास करें

$last = Product::create($data);

2

यहाँ शानदार जवाब, लेकिन मुझे JSON अनुरोध में एक मूल्य को बदलने की आवश्यकता थी। कोड में थोड़ी खुदाई के बाद, मैं निम्नलिखित कोड के साथ आया। मुझे पता है कि मैं कुछ गूंगा कर रहा हूँ।

$json = $request->json()->all();
$json['field'] = 'new value';
$request->json()->replace($json);

2

यदि आपको अनुरोध में किसी संपत्ति को अपडेट करने की आवश्यकता है, तो मैं आपको लारवेल द्वारा उपयोग किए गए अनुरोध वर्ग से प्रतिस्थापित विधि का उपयोग करने की सलाह देता हूं

$request->replace(['property to update' => $newValue]);

1
सावधान रहें, प्रतिस्थापन विधि मूल रीक्स्ट डेटा को हटा दें, और इसे अपने सरणी द्वारा प्रतिस्थापित करें। \ Symfony \ Component \ HttpFoundation \ ParameterBag लाइन 54 सार्वजनिक फ़ंक्शन बदलें (सरणी $ पैरामीटर = []) {$ यह-> पैरामीटर = $ पैरामीटर; }
ओलेग

2

यदि आप सत्यापन के लिए कस्टम अनुरोधों का उपयोग करते हैं, तो सत्यापन के लिए डेटा को बदलने के लिए, या डिफ़ॉल्ट डेटा सेट करने के लिए (चेकबॉक्स या अन्य के लिए) ट्रॉइड विधि का उपयोग करें prepareForValidation()

namespace App\Http\Requests\Admin\Category;
    
class CategoryRequest extends AbstractRequest
{
    protected function prepareForValidation()
    {
        if ( ! $this->get('url')) {
            $this->merge([
                'url' => $this->get('name'),
            ]);
        }
        $this->merge([
            'url'    => \Str::slug($this->get('url')),
            'active' => (int)$this->get('active'),
        ]);
    }
}

मुझे उम्मीद है कि यह जानकारी किसी के लिए उपयोगी होगी।


1

यह मेरे लिए काम करता है

$request = new Request();
$request->headers->set('content-type', 'application/json');     
$request->initialize(['yourParam' => 2]);

उत्पादन की जाँच करें

$queryParams = $request->query();
dd($queryParams['yourParam']); // 2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.