当前位置: 首页 > 知识库问答 >
问题:

在laravel上可编辑:看不到应用的更改

颛孙凯定
2023-03-14

给我的Laravel 5.1网站一个可编辑的镜头。我有一个列表的文本标题列为表行。我跟着留档。当我点击标题时,我可以看到文本字段的编辑表单弹出。我更改文本并提交。新文本显示,弹出窗口按预期消失。但是数据库没有更新。我确保将data-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');
}

共有3个答案

柯瀚海
2023-03-14

与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'
                }

                } );
 } );

拉维尔路线

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

拉威尔控制器

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";
        }
   } 
连翰
2023-03-14

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

将此添加到处理x-edable的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>

直接从我的控制器中的$请求访问x可编辑值:

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

谢谢你们的回复,希望这能帮助其他人!

柯奕
2023-03-14

我也在使用带有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 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甚至会表现得好像什么都没有错,并且不会在当时和那里显示错误。

以上对我来说很有用,所以一旦你调整了你的,我相信你应该开始。

 类似资料:
  • 有没有办法更改不可编辑JTextField的样式?如果文本字段设置为editable=false,我们希望文本字段的背景颜色略为灰色。我想其中一种方法就是 在每个组件上,但这似乎容易出错且乏味。 我想要实现的是:正常的JTextfiel应该按照nimbus外观和感觉的定义显示。只读字段(例如editable=false)应具有不同的背景色。禁用字段应按照nimbus LAF的定义显示。 我在Nim

  • 问题内容: 当用户编辑with 属性的内容时,我想运行一个函数。什么相当于一个事件? 我使用的是jQuery,因此首选使用jQuery的解决方案。谢谢! 问题答案: 我建议将侦听器附加到由editable元素触发的关键事件上,尽​​管您需要注意,并且在更改内容本身之前会触发事件。这不会涵盖更改内容的所有可能方法:用户还可以从“编辑”或上下文浏览器菜单中使用剪切,复制和粘贴,因此您可能也想处理和事件

  • 我正试图在一个需要过滤非数字字符和点的编辑文本上实现一个过滤器。我可以使用编辑文本或输入类型的数字标签,但似乎设备之间有轻微的差异,就像有些设备即使在编辑文本中过滤它们也显示点字符。 下面是afterTextChanged方法 这是输出结果 如您所见,在我删除第一个“h”后,当我输入另一个h时,字符串变为“66hh”,其中它应该是“66h”,因为我已经删除了第一个h。什么原因会阻止我对可编辑的更改

  • Android Studio中我的应用程序的可以编辑,但编辑完文本后,退出窗口时将不会保存。怎么办?

  • 问题内容: 当用户编辑with 属性的内容时,我想运行一个函数。什么相当于一个事件? 我使用的是jQuery,因此首选使用jQuery的解决方案。谢谢! 问题答案: 我建议将侦听器附加到由editable元素触发的关键事件上,尽​​管您需要注意,并且在更改内容本身之前会触发事件。这不会涵盖更改内容的所有可能方法:用户还可以从“编辑”或上下文浏览器菜单中使用剪切,复制和粘贴,因此您可能也想处理 和事

  • 我有表,和透视表。表只有两个字段和。 当我添加一个问题时,它还会将相应的值插入透视表。 假设我更改表单中的问题标记并保存,它应该更新透视表的值。如何更新透视表?我是拉威尔的新手。我试过类似的东西 但在我的例子中,pivot表中并没有额外的属性 问题模型 标签模型