লারাভিলের "ভরসা বরাদ্দ" এর অর্থ কী?


159

আমি স্পষ্টতত ORM বিষয় অংশ সম্পর্কে লারাভেল ডকুমেন্টের মধ্য দিয়ে গেলে, আমি একটি নতুন শব্দ পেলাম Mass Assignment

ডকুমেন্ট কীভাবে ভর অ্যাসাইনমেন্ট, কি করতে fillableবা guardedবৈশিষ্ট্য সেটিংস। তবে তা পেরিয়ে যাওয়ার পরেও, আমি Mass Assignmentএটি সম্পর্কে এবং কীভাবে এটি কাজ করে সে সম্পর্কে আমার পরিষ্কার ধারণা ছিল না ।

কোডআইগনিটারে আমার অতীত অভিজ্ঞতায় আমি এই শব্দটির কথাও শুনিনি।

সে সম্পর্কে কারও কি সরল ব্যাখ্যা আছে?


উত্তর:


206

যখন আপনি মডেল তৈরিতে কোনও অ্যারে প্রেরণ করেন তখন মূলত অ্যাসাইনমেন্ট হ'ল একের পর এক মডেলটিতে একাধিক ক্ষেত্র সেট করে রাখুন, একের পর এক নয়, এরকম কিছু:

$user = new User(request()->all());

(এটি আলাদা আলাদাভাবে মডেলের প্রতিটি মান আলাদাভাবে সেট করার পরিবর্তে।

আপনি fillableকোন ক্ষেত্রটি এটি আপডেট করার জন্য মঞ্জুরি দিতে চান তা রক্ষা করতে আপনি ব্যবহার করতে পারেন ।

আপনি এটি করে সমস্ত ক্ষেত্রকে ভর-নির্ধারিত হতে আটকাতে পারেন:

protected $guarded = ['*'];

আসুন আপনার ব্যবহারকারী সারণিতে বলি আপনার একটি ক্ষেত্র রয়েছে যা user_typeব্যবহারকারীর / প্রশাসকের মান থাকতে পারে

স্পষ্টতই, আপনি চান না যে ব্যবহারকারীরা এই মানটি আপডেট করতে সক্ষম হন। তত্ত্ব অনুসারে, আপনি যদি উপরের কোডটি ব্যবহার করেন তবে কেউ user_typeঅন্য ফর্মের ডেটা সহ 'অ্যাডমিন' প্রেরণের জন্য একটি নতুন ক্ষেত্রের জন্য একটি ফর্মের মধ্যে প্রবেশ করতে পারে এবং সহজেই তাদের অ্যাকাউন্টটি প্রশাসকের অ্যাকাউন্টে স্যুইচ করতে পারে ... খারাপ খবর।

যোগ করে:

$fillable = ['name', 'password', 'email'];

আপনি নিশ্চিত করছেন যে কেবল সেই মানগুলি ব্যবহার করে আপডেট করা যেতে পারে mass assignment

user_typeমানটি আপডেট করতে সক্ষম হতে আপনাকে এটিকে স্পষ্ট করে মডেলটিতে সেট করতে হবে এবং এটি সংরক্ষণ করতে হবে:

$user->user_type = 'admin';
$user->save();

16
এই উত্তরের জন্য ধন্যবাদ, আমি $user = new User(Input::all());এতটা অনিয়ন্ত্রিত (বা কোন পরিস্থিতিতে এটি সহায়ক হবে) এর মতো কে (প্রোগ্রামার হিসাবে) এমন কাজ করবে তা আমি পুরোপুরি বুঝতে পারি না ।
কিসলিক

14
... এটা উত্তর সব সময়ে না, এটি নিরাপত্তা প্রভৃতি সামগ্রিকভাবে পাঠ যেমন ছিনতাই ছাড়া উত্তর সংক্ষিপ্ত রাখার
duellsy

3
আমি বিষয়টি পেয়েছি, এবং আমি এই উত্তরটি পেয়েছি বলে আমি আনন্দিত। উপরের লাইনে উদ্ধৃত হওয়া দৃশ্যে আমি আমার কৌতূহলী (আমার মন্তব্যে) দরকারী। মানে বৈধতা ছাড়াই এবং চারপাশের সমস্ত জিনিস।
কিসলিক

4
সুতরাং আপনারা মনে করেন যে লারাভেলে "গণপুস্তক" এর অর্থ কী? শিরোনামের প্রশ্নের উত্তরে? বৈধতা সম্পর্কে আমার বিশদে যাওয়া উচিত ছিল ... ট্র্যাক না পেয়েই প্রশ্নের সহজ উত্তর ছিল। এটি যেমন আছে তেমন ছেড়ে দিন।
ডেল্ল্যাসি

8
আমি যে ওপি প্রশ্নের জিজ্ঞাসা করেছি তার মূল বিষয়টি কী তা নয়, তাই আমাকে নতুন থ্রেড তৈরি করতে হবে না এবং আপনি এটি সম্পর্কে "কেন নয়" কথা বলছেন। আমি সহজেই বুঝতে পারি না যে কেউ আপনার লেখার পরিবর্তে লাইনটি কেন ব্যবহার করবে$user = new User; $user->name = 'Neo';
ক্যাসলিক

26

ভর অ্যাসাইনমেন্ট এমন একটি ডেটা অ্যারে প্রেরণের প্রক্রিয়া যা নির্দিষ্ট মডেলটিতে একবারে সংরক্ষণ করা হবে। সাধারণভাবে, আপনার একক ভিত্তিতে আপনার মডেলটির ডেটা সংরক্ষণ করার দরকার নেই, বরং একক প্রক্রিয়াতে।

ভর নিয়োগ ভাল, কিন্তু এর পিছনে কিছু সুরক্ষা সমস্যা রয়েছে। কেউ যদি মডেলটির কোনও মান পাস করে এবং সুরক্ষা ছাড়াই তারা অবশ্যই আইডি সহ সমস্ত ক্ষেত্র পরিবর্তন করতে পারে। এটা ভালো না.

ধরা যাক আপনার "শিক্ষার্থী_সামগ্রী, প্রথম নাম, সর্বশেষ_নাম" ক্ষেত্র সহ 'ছাত্রছাত্রী' সারণী রয়েছে You আপনি "প্রথম নাম, সর্বশেষ নাম" ভরকরূপে নিয়োগ দিতে চাইতে পারেন তবে আপনি ছাত্র-টাইপকে সরাসরি পরিবর্তিত হতে রক্ষা করতে চান That's সেখানেই ভাস্কর্যযুক্ত এবং সুরক্ষিত স্থান রয়েছে।

ফিললেবল আপনাকে আপনার মডেলটিতে কোন ক্ষেত্রগুলি ভর-নির্ধারিত তা নির্দিষ্ট করতে দেয়, আপনি $fillableএটি মডেলটিতে বিশেষ ভেরিয়েবল যুক্ত করে করতে পারেন । মডেল তাই:

class Student extends Model {
      protected $fillable = ['first_name', 'last_name']; //only the field names inside the array can be mass-assign
} 

' ছাত্র_প্রকার ' অন্তর্ভুক্ত নয়, যার অর্থ তারা অব্যাহতিপ্রাপ্ত।

রক্ষিত হ'ল প্রলাপের বিপরীত। ফিললযোগ্য যদি ক্ষেত্রকে ভর নির্ধারিত করতে হয় তা নির্দিষ্ট করে, সুরক্ষিত কোন ক্ষেত্রগুলি ভর নির্ধারিত নয় তা নির্দিষ্ট করে। মডেল তাই:

class Student extends Model {
      protected $guarded = ['student_type']; //the field name inside the array is not mass-assignable
}

আপনার উভয়ই নয় - ফিললযোগ্য বা ed রক্ষিত ব্যবহার করা উচিত।

আরও তথ্যের জন্য লিংকটি খুলুন: - গণ নিয়োগ


1
এটি সরাসরি ম্যাট স্টাফারের বই "লারাভেল আপ অ্যান্ড রানিং" এর বাইরে এসেছে
ঝটপট

5

ভর নিয়োগের অর্থ আপনি ডেটার অ্যারে ব্যবহার করে একাধিক কলাম দিয়ে একটি সারি পূরণ করছেন। (ম্যানুয়ালি অ্যারে তৈরির পরিবর্তে কিছুটা শর্টকাট) ব্যবহার করে Input::all()

প্রযুক্তিগতভাবে আমার মাথার উপরের দিক থেকে। ফিলিলযোগ্য মানে টেবিলের মধ্যে কলামগুলি sertedোকানোর অনুমতি দেওয়া হয়েছে, রক্ষিত মানে মডেলটি নির্দিষ্ট কলামটিতে সন্নিবেশ করতে পারে না।

লক্ষ্য করুন যে আপনি যখন "গোপন" নামক একটি কলামে পছন্দ মতো একটি ভর অ্যাসাইনমেন্টটি করার চেষ্টা করছেন এবং আপনি এটি নির্দিষ্ট করে রেখেছেন তা মডেলটির মাধ্যমে আপনি এটি প্রবেশ করানোর চেষ্টা করতে পারেন, তবে এটি কখনই প্রবেশ করা যাবে না ডাটাবেস

মডেলটি ব্যবহার করার সময় এটি আপনার টেবিলের সুরক্ষা এবং সুরক্ষার জন্য। গণ কার্য নিয়োগ কেবলমাত্র একটি নোটিশ বা সতর্কবার্তা বলে মনে হচ্ছে যে আপনি মডেলটিকে বলছেন না যা প্রসারণযোগ্য এবং সুরক্ষিত এবং এটি কোনও ধরণের আক্রমণে ঝুঁকিপূর্ণ করে তোলে।


2

এটি তখনই পাওয়া যখন কোনও মডেলটিতে প্রাপ্ত ডেটার অ্যারে একবারে সংরক্ষণ করা হয়।

লারাভেলে এই পদ্ধতিটি সহ সুরক্ষা সমস্যাগুলির কারণে, আপনি অনুরোধ করা ডেটাটি মডেলটিতে পপুলেশন করতে ইচ্ছুক ক্ষেত্রগুলি সংজ্ঞায়িত করার পরামর্শ দেওয়া হচ্ছে।

আপনি $fillableডাটাবেস টেবিলের উপর যে ক্ষেত্রগুলি স্থাপন করতে চান তা নির্ধারণ করতে আপনি ভেরিয়েবলটি ব্যবহার করতে পারেন ।

যেমন

Protected $fillable = [‘username’, dob’, email’,];

ল্যারাভেল যখন সনাক্ত করে যে আপনি ভরকে নির্ধারিত ডেটা করছেন তখন এটি আপনাকে মডেল শ্রেণিতে ভরকর ক্ষেত্রগুলি নির্ধারণ করতে বাধ্য করে।

কেউ আপনার ডাটাবেসে সহজেই এইচটিএমএল ফর্মের মধ্যে অযাচিত ডেটা প্রেরণ করতে পারে।

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