Laravel 刀片:如何删除预先填充的表单字段数据(在 db 中另存为空)

Posted

技术标签:

【中文标题】Laravel 刀片:如何删除预先填充的表单字段数据(在 db 中另存为空)【英文标题】:Laravel blade: How do you delete prepoulated form field data (save in db as null) 【发布时间】:2014-11-20 15:36:39 【问题描述】:

我正在构建一些表单,其中字段填充有数据库数据,如果没有数据,则默认为占位符文本。

我似乎无法弄清楚的是:当用户删除表单中的所有数据时,它不会将其作为空白/空值保存回数据库,它只是在字段中携带相同的值......

输入:

<div class="form-group @if($errors->has('username')) 'has-error' @endif">    
    <div class="col-md-6">
        <label for="username">Username</label>
        @if($errors->has('username'))<span class="label-has-error"> $errors->first('username') </span>@endif
        <input type="text" name="username" class="form-control" tabindex="1" @if($info->username) value=" e($info->username) " @else placeholder="Username" @endif>
    </div>
</div>

控制器:

public function postSettings() 

    $validator = Validator::make(Input::all(),
        array(
            'username' => 'required_without_all:location,fullname|min:3',
            'fullname' => 'required_without_all:location,username',
            'location' => 'required_without_all:fullname,username'
        )
    );

    if($validator->fails()) 

        return Redirect::route('settings')->withErrors($validator);

     else 

        $user = User::find(Auth::user()->id);

        if(Input::get('username')) 
            $user->username = Input::get('username');
        
        if(Input::get('fullname')) 
            $user->fullname = Input::get('fullname');
        
        if(Input::get('location')) 
            $user->location = Input::get('location');
        

        $user->save();

        Flash::success('Settings have been updated');

        return Redirect::route('settings');

    

    Flash::error('Update was unsecessful, please try again!');

    return Redirect::route('settings');


关于如何实现这一点的任何想法?

谢谢,杰克。

【问题讨论】:

没有你的代码很难说什么。将数据保存到控制器中的数据库是您的工作。您应该提供控制器代码 嗨@MarcinNabiałek 我已经添加了控制器代码。我不确定检测表单是否为空的逻辑是什么。谢谢。 【参考方案1】:

问题是if 语句。

你应该尝试改变:

if(Input::get('username')) 
    $user->username = Input::get('username');

if(Input::get('fullname')) 
    $user->fullname = Input::get('fullname');

if(Input::get('location')) 
    $user->location = Input::get('location');

进入

$user->username = Input::get('username');
$user->fullname = Input::get('fullname');
$user->location = Input::get('location');

现在,如果这些输入为空,if 语句将返回 false,因此不会完成分配,最后您将准确地保存到数据库中。

【讨论】:

谢谢,完美运行。我总是忘记 Laravel 是多么简单:)

以上是关于Laravel 刀片:如何删除预先填充的表单字段数据(在 db 中另存为空)的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 刀片的表单字段中使用变量

使用javascript将具有删除操作的表单附加到laravel刀片文件

如何在 Laravel 中填充 HTML 表单中的字段?

如何使用另一个 MySQL 表中的现有数据填充预先选择的下拉字段?

Laravel - 刀片注释,刀片渲染导致页面崩溃

表单未预先填充Angular 8