2013-10-05 86 views
1

我使用Laravel 4和Angular JS来处理使用RESTful控制器的$ http请求。Laravel RESTful控制器参数

我有一个RESTful控制器,UserController具有以下功能:

public function getIndex(){ 
    //is Request::get() the correct way to get the parameter? 
    echo json_encode(array(
     'username'=>User::countUsername(Request::get('name')), 
     'email'=>User::countEmail(Request::get('email')) 
    )); 
} 

public function postIndex(){ 
    //don't know how to get parameter 
} 

的$ HTTP GET和我提出POST请求低于:

GET

//is this url the correct way to send in my parameters for GET request? 
dataString = 'name='+username+'&email='+email; 
$http.get('user?'+dataString).success(
    //do something with returned json 
) 

POST

data = { 
    'username':username, 
    'email':email, 
    'password':password 
} 
$http.post('user', data).success(
    //do something 
) 

getIndex()方法工作得很好,虽然我怀疑我是否使用正确的过程。

有了上面所说的,我有两个问题:

  1. Request::get()来检索XHR参数得到正确的方法是什么?在我的Javascript中添加dataString到URL的正确方式是以REST方式发送参数?

  2. 如何检索从我的XHR POST发送的JSON对象?我尝试了几种方法,包括Request::get()Input::json(),但我没有运气。

在此先感谢。

回答

3

您必须使用$input = Input::all()来检索使用角度$ http发送的数据。然后使用像$name = $input['name'];

如果你正在使用更新Laravel 4,用最好的方式的RESTful API是,

控制器看起来像这样,

<?php 


class UsersController extends BaseController { 

    /** 
    * Display all users. 
    * 
    * @return Response 
    * GET http://localhost/laravel/users 
    */ 

    public function index() { 
     $users = User::all(); 
     return $users; 
     //return View::make('users.index')->with('users', $users); 
    } 

    /** 
    * Show the form for creating a new resource. 
    * 
    * @return Response 
    */ 

    public function create() { 
     // 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @return Response 
    * POST http://localhost/laravel/users 
    */ 

    public function store() { 
     // 
    } 

    /** 
    * Display the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    * GET http://localhost/laravel/users/1 
    */ 

    public function show($id) { 
     // 
    } 

    /** 
    * Show the form for editing the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 

    public function edit($id) { 
     // 
    } 

    /** 
    * Update the specified resource in storage. 
    * 
    * @param int $id 
    * @return Response 
    * PUT http://localhost/laravel/users/1 
    */ 

    public function update($id) { 
     // 
    } 

    /** 
    * Remove the specified resource from storage. 
    * 
    * @param int $id 
    * @return Response 
    * DELETE http://localhost/laravel/users/1 
    */ 

    public function destroy($id) { 
     $user = User::find($id); 

     $user->delete(); 

     return Response::json(array(
      'error' => false, 
      'message' => 'User Deleted'), 
      200 
     ); 
    } 

} 

在你的路线,

Route::resource('users', 'UsersController'); 

在角脚本使用,

var app = angular.module('myApp', []); 
// include this in php page to define root path 
app.factory('Data', function(){ 
    return { 
     root_path: "<?php echo Request::root(); ?>/" 
    }; 
}); 

GET - 获取所有用户

$http({method: 'GET', url: Data.root_path + 'users'}). 
success(function(data, status, headers, config) { 
    $scope.users = data.users; 
}). 
error(function(data, status, headers, config) { 
    $scope.users = []; 
}); 

GET - 获取单个用户进行编辑

$http({method: 'GET', url: Data.root_path + 'users/'+id}). 
success(function(data, status, headers, config) { 
    $scope.entry = data.users[0]; 
}). 
error(function(data, status, headers, config) { 
    $scope.entry = []; 
}); 

PUT - 更新单个用户

$http.put(Data.root_path + 'users/'+entry.id, entry). 
success(function(data, status, headers, config) { 
    // 
}). 
error(function(data, status, headers, config) { 
    // 
}); 

POST - 保存新的用户

$http.post(Data.root_path + 'users', entry). 
success(function(data, status, headers, config) { 
    // 
}). 
error(function(data, status, headers, config) { 
    // 
}); 

删除 - 删除用户

$http.delete(Data.root_path +'users/'+id) 
.success(function(response) { 
    // 
}) 
.error(function(response) { 
    // 
}); 
+1

哎非常感谢您的回答。它是允许您在正斜杠之后放入参数的route :: resource吗? –

+1

是的。例如在销毁函数中,我使用正斜杠在角度''http http.delete'' – devo

+0

中传递用户标识,这一定会非常方便,非常感谢! –