লারাভেলটিতে কীভাবে একটি অনুরোধ প্যারামিটারের মান পরিবর্তন করতে হয়


94

আমার অনুরোধের প্যারামিটারের মূল্য এর মতো বদলাতে হবে:

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

আমি এই কোডটি ব্যবহার করি তবে কার্যকর হয় না:

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

4
লারাভেল পরিবর্তনের ইনপুট মানটির সম্ভাব্য সদৃশ - উত্তরটি শীর্ষ প্রশ্নের প্রশ্নের মন্তব্যে রয়েছে।
জোয়েল হিনজ

উত্তর:


61

ব্যবহার merge():

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

সরল! পুরোটি $request->all()অন্য ভেরিয়েবলে স্থানান্তর করার দরকার নেই ।


187

চেষ্টা কর:

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

এটি করার আরেকটি উপায়:

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

এটির জন্য @ জোয়েলহিনজকে ধন্যবাদ।

যদি আপনি নেস্টেড ডেটা যুক্ত করতে বা ওভাররাইট করতে চান:

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

আপনি যদি Request $requestবস্তু ইনজেক্ট না করেন তবে আপনি এর পরিবর্তে গ্লোবাল request()সহায়ক বা \Request::মুখোমুখি ব্যবহার করতে পারেন$request


ত্রুটি:
অপরিজ্ঞাত

পুট () হ'ল একটি সংগ্রহ পদ্ধতি, $ অনুরোধ-> সমস্ত () একটি অ্যারে প্রদান করে।
জোয়েল হিনজ

4
অনুরোধ অবজেক্টটিতে আসলে () এবং মার্জ () পদ্ধতিগুলি রয়েছে। আমি সাধারণত সেগুলি ব্যবহার করতে পছন্দ করি। সে সম্পর্কে একটি এসও উত্তরের জন্য প্রশ্নে আমার মন্তব্য দেখুন।
জোয়েল হিনজ

@ জোয়েলহিনজ, আমি ভেবেছিলাম তারা লারাভেল ৫ এ কাজ করে না, কারণ আমি এমন কয়েকটি পোস্ট দেখেছি যেখানে এই পদ্ধতিগুলি ব্যবহার করে ছেলেরা সমস্যায় পড়েছিল। তবে আমি Requestএল 5 এর উত্স কোডটি দেখেছি এবং আমি এই পদ্ধতিগুলি দেখতে পাচ্ছি। ধন্যবাদ
আলেক্সি মেজেনিন

4
ঘাম নেই. যদিও আপনার উত্তরটি এখনও ভুল। প্রতিস্থাপন () পদ্ধতিটি পুরো ইনপুটকে প্রতিস্থাপন করে - আপনি কেবল একটি মান প্রতিস্থাপন করতে চাইলে আপনাকে () মার্জ করতে হবে।
জোয়েল হিনজ

8

আপনার যদি অনুরোধটি কাস্টমাইজ করতে হয়

$data = $request->all();

আপনি ক্ষেত্রের নাম এবং মানটি পাস করতে পারেন

$data['product_ref_code'] = 1650;

এবং অবশেষে নতুন অনুরোধটি পাস করুন

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

3

আপনি যদি অনুরোধে কোনও সম্পত্তি আপডেট করতে চান তবে আমি আপনাকে লারাভেল দ্বারা ব্যবহৃত অনুরোধ ক্লাস থেকে প্রতিস্থাপন পদ্ধতিটি ব্যবহার করার পরামর্শ দিচ্ছি

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

4
সতর্কতা অবলম্বন করুন, পদ্ধতিটি পুনরুদ্ধারের মূল আসলটি সরিয়ে ফেলুন এবং এটিকে আপনার অ্যারে দ্বারা প্রতিস্থাপন করুন। M সিমফনি onent উপাদান \ এইচটিটিপিফাউন্ডেশন \ প্যারামিটারব্যাগ লাইন 54 জনসাধারণের ফাংশন প্রতিস্থাপন করে (অ্যারে $ পরামিতি = []) $ $ এই-> পরামিতি = $ পরামিতি; }
ওলেগ

2

দুর্দান্ত উত্তর এখানে তবে জেএসএএন অনুরোধে আমার একটি মান প্রতিস্থাপন করতে হবে। কোডটিতে কিছুটা খনন করার পরে, আমি নিম্নলিখিত কোডটি নিয়ে এসেছি। আমি বোবা কিছু করছি কিনা আমাকে জানান।

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

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.