Laravel 4 Mass Assignment

การกำหนดชื่อฟิลด์ name ใน form ให้ตรงกับชื่อฟิลด์ในฐานข้อมูล และยิงลงฐานข้อมูลทั้งหมดทุกฟิลด์

ข้อดี : ลดการเขียนโค้ดใน controllers ที่ต้องมา match ฟิลด์เองจากค่าที่ส่งจาก form
ช่องโหว่ : ถ้าใส่ input type hidden มาจะเกิดปัญหา
วิธีแก้ : laravel แก้ด้วยการให้ใส่ชื่อฟิล์ดที่ยอมให้ใช้ได้ในตัวแปร $fillable ใน Model

class User extends Eloquent implements UserInterface, RemindableInterface {
   protected $fiilable = array('field1','field2',...,'fieldN')
   ...
}

ถ้าส่งจำนวนฟิลด์มาไม่ครบจะโยน MassiveAssignment Exception

try{
         //User model use Mass Assignment
         $post = Input::all();
         $newUser = new User($post);
         $newUser->save();
}
catch(\Exception $ex){
        //get Exception error message
        echo $ex->message();
}

ตัวอย่างนี้ใช้ try catch ดักจับข้อผิดพลาดต่างๆ อาจจะเกิดจากการ save() ไม่ได้ หรือ mass assignment error ก็ได้

Reference Laravel 4 Massive Assignment
http://laravel.com/docs/eloquent#mass-assignment http://www.youtube.com/watch?v=c0RFK3XDwPk

Related posts:

This entry was posted in laravel4. Bookmark the permalink.