用我的Laravel 5.1网站给x-editable一个镜头。我有一个列为表格行的文本标题列表。我遵循了文档。当我单击标题时,我可以看到弹出的文本字段的编辑表单。我修改文本并提交。弹出窗口按预期消失,显示新文本。但数据库没有更新。我确保将数据url设置为我需要的帖子操作。一定要为它添加一个路由。一定要在我的控制器中有一个方法来处理请求、更新数据库和重定向(不确定是否需要重定向)。下面是单行的一个片段,为了简单起见,我对标题及其id进行了硬编码。
<a href="#" class="task-editable-name" id="task-editable-name" data-type="textarea" data-url="/task/2/edit" data-title="">Solve x-editable bug</a>
$(document).ready(function() {
$.fn.editable.defaults.mode = 'popup';
$('.task-editable-name').editable({
placement: 'bottom',
rows: 3
});
});
Route::post('/task/{task}/edit', 'TaskController@edit');
public function edit(Request $request, Task $task)
{
$task->name = $request['value'];
$task->save();
return redirect('/tasks');
}
我使用的是带有x-editable的Laravel 5.1,以下是我如何实现更新,以便您可以找到对您的问题的一些用途:
链接:
<div class="myupdate">
<a data-name="database_column_name" href="#" data-type="text" data-url="update-row" data-pk="1" class="pUpdate" data-title=""></a>
</div>
路线:
Route::post('update-row', 'HomeController@updateRow');
控制器:
public function updateRow(Request $request)
{
// get database row id
$pk = $request->input('pk');
// get column name
$col = $request->input('name');
// get new value
$value = $request->input('value');
// get id row of line item and edit/save
if ($finditem = Items::where('id', $pk)->update([$col => $value]))
{
return Response::json(array('status' => 1));
}
else
{
return Response::json(array('status' => 0));
}
}
jQuery:
$(document).ready(function(){
$.fn.editable.defaults.mode = 'popup';
$('.myupdate').editable({
selector: '.pUpdate',
validate: function(value) {
if($.trim(value) == '') {
return 'Value is required.';
}
},
placement: 'top',
send:'always',
ajaxOptions: {
dataType: 'json'
}
});
});
正如James所说,您是否检查过要更新的列是否列在表模型中的$fillable数组下?
数据库表模型:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Items extends Model {
protected $connection = 'mysql';
protected $primaryKey = 'id';
protected $table = 'items_table';
protected $fillable = array(
'name',
'description',
'quantity'
);
public $timestamps = true;
}
你能打开浏览器开发工具来监控在这一切过程中是否出现任何错误吗?
我觉得奇怪的是,x-editable甚至会表现得好像什么都没有错,而且不会立即显示错误。
以上对我来说很有效,所以一旦你调整了你的计划,我相信你应该会成功的。
我解决了我的问题。我必须做三件事:
将其添加到处理x-editable:的js中
$.fn.editable.defaults.send = "always";
包含以下每个laravel文档的元和脚本:
<meta name="csrf-token" content="{{ csrf_token() }}" />
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
直接从我的控制器中的$request:访问x可编辑值
public function edit(Request $request, Task $task)
{
$task->name = $request->value; // instead of $request->input('value')
$task->save();
}
谢谢大家的回复,希望这能帮助到其他人!
将xeditable与laravel 一起使用的简单方法
HTML
<link href="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/jqueryui-editable/css/jqueryui-editable.css" rel="stylesheet"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.0/jqueryui-editable/js/jqueryui-editable.min.js"></script>
<div id="_token" class="hidden" data-token="{{ csrf_token() }}"></div>
<a href="#" id="industryName" data-type="text" data-pk="{{ $industry->id }}" data-title="Edit industry">{!! $industry->name !!}</a>
Javascript
$(document).ready(function() {
$.fn.editable.defaults.mode = 'inline';
$.fn.editable.defaults.params = function (params)
{
params._token = $("#_token").data("token");
return params;
};
$('#industryName').editable({
validate: function(value) {
if($.trim(value) == '')
return 'Value is required.';
},
type: 'text',
url:'/updateIndustry',
send:'always',
ajaxOptions: {
dataType: 'json'
}
} );
} );
laravel路由
Route::post('/updateIndustry', 'SettingsController@updateIndustry');
laravel控制器
public function updatePosition(Request $request)
{
$id= $request->pk;
$position = $request->value;
$count = DB::table('designations')->whereRAW("position LIKE '%".$position."%'")->where('id','!=',$id)->count();
if($count)
echo "Similar position exists.";
else
{
DB::table('designations')->where('id',$id)->update(['position' => $position]);
echo "1";
}
}