menu

Laravel - RESTful project (API store data)


Pada tutorial sebelumnya kita sudah membuat API untuk method get yang digunakan untuk menampilkan list user yang ada, tutorial kali ini kita akan bereksperiment membuat API untuk method post yang digunakan untuk menambah data list user.

Oke langsung saja kita mulai experimentnya.
Pertama buat terlebih dahulu routes untuk method store-user, dengan menambahkan code pada path /protected/app/routes/api.php sehingga code-nya akan tampak seperti ini,
<?php 

//////////
// CRUD //
//////////
//pahamilah group route dibawah
Route::group(array('prefix' => 'crud'), function(){
 Route::get('users', 'Controller\Api\UserController@getUsers');
 Route::post('store-user', 'Controller\Api\UserController@storeUser');
});

Selanjutnya, tambahkan function method baru storeUser pada controller UserController pada path /protected/app/controllers/api/ sehingga code-nya akan tampak seperti ini,
<?php namespace Controller\Api;

use Model\User;
use \Response;
use \Validator;
use \Input;


class UserController extends \BaseController 
{
 public function getUsers()
 {
  $users = User::get();

  $response['status'] = 'OK';
  $response['result'] = $users;

  return Response::json($response);
 }

 public function storeUser()
 {
  $validator = Validator::make(
   Input::all(),
   array(
    "name"     => "required",
    "username"    => "required|unique:users,username",
    "email"     => "required|email|unique:users,email",
       "password"              => "required|min:6",
   )
  );
  // dd($_POST);
  if ($validator->passes()) {
     $user = User::storeOrUpdateUser(Input::all());
     // dd($_POST);
     $response['status'] = 'OK';
     $response['result'] = $user;
     return Response::json($response);
    }
    else {
     $response['status'] = 'ERROR';
     $response['message'] = $validator->messages();
     return Response::json($response);
    }
  }
}

Setelah itu edit model User.php pada path protected/app/models/ menjadi seperti ini,
<?php namespace Model;

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use Illuminate\Database\Eloquent\Model;
use \Eloquent;
use \Hash;

class User extends Eloquent implements UserInterface, RemindableInterface {

 use UserTrait, RemindableTrait;

 /**
  * The database table used by the model.
  *
  * @var string
  */
 protected $table = 'users';

 /**
  * The attributes excluded from the model's JSON form.
  *
  * @var array
  */
 protected $hidden = array('password', 'remember_token');

 // Relation
    public function addresses()
    {
        return $this->hasMany('Model\Address');
    }

    public function role()
    {
        return $this->belongsTo('Model\Role');
    }

    public function company()
    {
        return $this->hasOne('Model\Company');
    }

    public static function storeOrUpdateUser(array $input, $user)
    {
     if (!$user) {
      $user = new User;     
     }
       
     $user->name     = $input['name'];
     $user->username = $input['username'];
     $user->email    = $input['email'];
     $user->password = Hash::make($input['password']);
     $user->save(); 

     return $user;
    }
}

Terakhir test menggunakan postman dengan memasukan url http://localhost/tempat-meletakkan-project-anda/api/crud/store-user dengan method POST dan body seperti gambar dibawah ini,


Sehingga saat kita klik Send maka hasilnya akan tampak seperti ini,



===DONE!===