la -vel上的x-editable:未看到应用的更改

时间:2015-12-07 03:39:52

标签: php twitter-bootstrap laravel laravel-5.1 x-editable

使用我的Laravel 5.1网站进行x-editable一次拍摄。我有一个列为表行的文本标题列表。我按照文档。单击标题时,我可以看到弹出文本字段的编辑表单。我改变了文字并提交。新文字显示,弹出窗口按预期消失。但是数据库没有更新。我确保将data-url设置为我需要的post动作。确保为它添加路线。确保在我的控制器中有一个方法来处理请求,更新数据库并重定向(不确定是否需要重定向)。这是一个单行的片段,我硬编码的标题和简单的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');
}

3 个答案:

答案 0 :(得分:2)

我正在使用带有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'
        }
    });
 });

正如詹姆斯所说,您是否检查了您要更新的列是否列在表模型中的$ fillable数组下?

数据库表模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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甚至可以表现得没什么不对,并且当时就没有显示错误。

以上对我有用,所以一旦你调整了你,我相信你应该顺其自然。

答案 1 :(得分:1)

我解决了我的问题。我必须做三件事:

将此添加到处理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-editable值:

public function edit(Request $request, Task $task)
{
    $task->name = $request->value; // instead of $request->input('value')
    $task->save();
}

感谢各位回复,希望这可以帮助那些人!

答案 2 :(得分:1)

使用带有laravel的xeditable的简单方法

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

Route::post('/updateIndustry',  'SettingsController@updateIndustry');

laravel controller

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";
        }
   }