লারাভেল-৫ টিউটোরিয়াল (পর্ব-০৫) :: ডাটা ইডিট করা।

বিভাগ: লারাভেল টুডু অ্যাপ্লিকেশন


আমরা গত পর্বটিতে ডাটা ইনসার্ট ও ডাটা রিট্রিভ করা শিখেছি। আজ আমরা ডাটা কিভাবে ইডিট করতে হয় তা জানব। ডাটা ইডিট করার জন্য আমরা ১ মে বর্তমান রেকর্ডটি আগে একটি ফর্মে তুলে নিয়ে আসব তারপর তা প্রয়োজন অনুযায়ী ইডিট করে তা ডাটাবেসে আপডেট করে দিব। চলুন শুরু করি।

১ মে আমরা একটি রাউট লিখব ইডিট ফর্মটির জন্য যেখানে আমরা বর্তমান রেকর্ডটি তুলে নিয়ে আসব।

Route::get('/{id}/edit',['as'=>'getEditRoute','uses'=>'TodoController@edit']);

উপরোক্ত রাউটটিতে {id} অর্থ এখানে ডাইনামিক আইডি হবে। অর্থাৎ আমরা প্রতিটি রের্কয়ের যে ইউনিক আইডি আছে তা এইখান দিয়ে পাস করব এবং এই রাউটটি TodoController এর getEdit নামক একটি ম্যাথড হ্যান্ডেল করবে। এখানে getEditRoute হল naming route অর্থাৎ আমরা যেকোন স্থান থেকে একে এই নামে কল করতে পারব। এটি আমরা আমাদের পছন্দমত নাম দিতে পারবো। এটির একটি সুবিধা হল যখন কোন কারণে আপনার ইআরএল পরিবর্তন করতে হবে তখন আপনাকে আবার অ্যাপ্লিকেশনের প্রতিটি জায়গায় গিয়ে ইউআরএল পরিবর্তন করতে হবে না। নাম দেয়া থাকলে লারাভেল অটোমেটিক রাউটির পাথ চিনে নিবে। আমরা যখন রাউটটিতে ডাইনামিক ভাবে আইডি দিব তখন রাউটটির জন্য URL গুলো নিন্মোক্তভাবে দেখাবে।

http://localhost/todo/public/1/edit

http://localhost/todo/public/2/edit

এবার TodoController এ একটি getEdit নামে ম্যাথড নিই এবং নিন্মোক্তভাবে ম্যাথডটিতে কোড লিখি

public function getEdit($id){
        $data=Todo::find($id);
        return view('todo-edit',compact('data'));
  }

কোডের বিশ্লেষণ:

এইখানে getEdit ম্যাথডটি একটি প্যারামিটার রিসিভ করছে যেটি আমরা আমাদের রাউট থেকে ডাইনামিক্যালি পাব। অত:পর এই আইডি দিয়ে আমরা আমাদের কাঙ্ক্ষিত রেকর্ডটি ডাটাবেস থেকে তুলে আনব। আইডিটি মডেলের find ম্যাথডে দিলেই আমারে ডাটা পেয়ে যাব। এখন আমরা এই $data ভেরিয়েবলটি আমাদের ভিউতে পাস করে দিব।

এখানে একটি todo-edit নামে একটি ভিউ দেখতে পাচ্ছি যেটি এখনো আমরা তৈরী করিনি। এটি তৈরী করব আমরা resources/views ফোল্ডারে। ভিউটি তৈরী করে এতে নিচের মত কোড লিখুন

এই ভিউটিতে একটি POST route দেখা যাচ্ছে যেটি আমরা লিখিনি। এই জন্য আমরা রাউট ফাইলে নিচের এই রাউটটি লিখব।

Route::post('/{id}/edit',['as'=>'postEditRoute','uses'=>'TodoController@update']);

এখন home.blade.php ফাইলটি খুলে action কলামটিতে এটি লিখুন

 

<a class="btn btn-warning" href="{{route('getEditRoute',$row->id)}}">Edit</a>

এখন যদি পেইজ রিলোড করেন তবে প্রতিটি রো'তে ইডিট বাটন দেখতে পাবেন। যেগুলোতে ক্লিক করলে নতুন একটি ফর্মে ডাটা সহ দেখাবে। এখন ডাটা ইডিট করে যাতে Update বাটনে ক্লিক করলে ডাটাগুলো আপডেট হয় তার জন্য POST রাউটটিতে যে ম্যাথডটি লিখেছি তাতে ডাটা আপডেট করার জন্য কোড লিখব।

public function update(Request $r,$id)
	{
		$data=[
			'name'=>$r->input('name'),
			'status'=>$r->input('status')
			];

		$response=Task::find($id)->update($data);
		if($response)
		{
			return redirect('/')->with('success','Task updated successfully');
		}
	}

কোডের বিশ্লেষণ

উপরের update ম্যাথডটিতে দু'টি প্যারামিটার রিসিভ করা হয়েছে। একটি ফর্ম থেকে যে রিকুয়েস্টটি আসবে তার ডাটা নিতে। অন্যটি আমাদের পাঠানো ডাইনামিক আইডিটি রিসিভ করার জন্য। অবশ্যই খেয়াল রাখবেন রাউটে যেরকম লিখবেন ম্যাথডেও একি রকম নামে রিসিভ করবেন। যেমন আমরা রাউটে লিখেছি {id} তাই আমরা ম্যাথডেও $id নামে প্যারামিটার দিয়ে রিসিভ করেছি। এখন এই আইডি দিয়ে রেকর্ডটিকে তুলে এনে ফর্ম রিকুয়েস্ট হতে যে পরিবর্তনগুলো আসবে তা দিয়ে আপডেট করা হয়েছে। অবশেষে আপডেটটি যে সফলভাবে হয়েছে তা ইউজারকে জানানোর জন্য রিটার্ণ করার সময় একটি success কী দিয়ে Flash Message পাঠানো হয়েছে।

ব্যাস আমাদের ডাটা আপডেট করার কাজ শেষ। এখন ইডিট করে আপডেট বাটনে ক্লিক করলে ডাটাবেসে আমাদের ডাটা আপডেট হয়ে যাবে।

এখন আপনারা নিজেরা একবার ট্রাই করুন। কারো কোথাও বুঝতে সমস্যা হলে কিংবা কোন প্রকার সমস্যার সম্মূখীন হলে জানাবেন। 


এই রকম আরো পোষ্ট