我是Laravel和Lumen框架的新手。
我正在尝试使用Lumen框架创建API。我想将数据输入到数据库。但是使用id,date_created和date_updated更新数据库。但我输入的数据没有插入那里。相反,它显示字符串输入为空白,整数输入为0。
这是我的控制器代码:
<?php
namespace App\Http\Controllers;
use App\Place;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PlaceController extends Controller{
public function savePlace(Request $request){
$place = Place::create($request->all());
return response()->json($place);
}
}
这是我的迁移代码:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePlacesTable extends Migration
{
public function up()
{
Schema::create('places', function (Blueprint $table) {
$table->increments('id');
$table->string('place');
$table->integer('pincode');
$table->integer('bed');
$table->integer('square_feet');
$table->integer('price');
$table->timestamps();
});
}
public function down()
{
Schema::drop('places');
}
}
我做得对吗?我应该使用任何其他代码吗?
请帮忙。
提前致谢。
编辑:
这是我的地方型号代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Place extends Model{
protected $fillable = ['place', 'pincode', 'bed', 'square_feet', 'price'];
}
编辑2:
我从angularjs应用程序(离子框架)发送请求。
这是我的 http.post 代码:
app.controller('NavCtrl', ['$scope', '$http', '$location', '$window', function($scope,$http,$location,$window){
$scope.data = {};
$scope.savedata = function(){
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: $headers,
data : {'place':$scope.data.place,'pincode':$scope.data.pincode,'bed':$scope.data.bed,'square_feet':$scope.data.square_feet,'price':$scope.data.price}
})
.success(function(data,status,headers,config){
console.log(data);
$scope.navigat('/success.html');
})
.error(function(){
alert("failed");
})
};
$scope.navigat = function(url){
$window.location.href=url;
};
}]);
这是我的 routes.php 代码:
<?php
header("Access-Control-Allow-Origin: *");
$app->get('/', function () use ($app) {
return $app->version();
});
$app->post('lumen/public/add','PlaceController@savePlace');
答案 0 :(得分:1)
根据this answer,问题似乎是角度为POST数据的方式。基本上,它试图将数据作为JSON发布,但PHP没有做任何事情来将JSON数据转换为请求查询数据。
要实现这一点,您需要做两件事。
首先,您需要将Content-Type
标题更改为application/x-www-form-urlencoded
。但是,仅更改内容类型标题不会解决问题,因为angular仍然将数据作为JSON请求进行POST。
因此,第二,您需要将从JSON格式发布的数据更改为查询字符串格式(name = value&amp; name = value)。
所以,将代码更新为:
$http({
url : "http://localhost/lumen/public/add",
method : "POST",
headers: { "Content-Type" : "application/x-www-form-urlencoded" },
data : [
'place=' + encodeURIComponent($scope.data.place),
'pincode=' + encodeURIComponent($scope.data.pincode),
'bed=' + encodeURIComponent($scope.data.bed),
'square_feet=' + encodeURIComponent($scope.data.square_feet),
'price=' + encodeURIComponent($scope.data.price)
].join('&')
})