首页 >php框架 >Laravel >laravel怎么启用“禁止批量赋值”特性

laravel怎么启用“禁止批量赋值”特性

PHPz
PHPz原创
2023-04-09 00:30:02667浏览

在Laravel框架中,不可批量赋值是一个重要的安全特性,它有助于防止恶意用户篡改数据库数据。但是这个特性也有用途不明确的时候,造成了许多程序员的困惑。

在批量赋值时,程序员将表单数据直接通过create或者update方法保存到数据库中。如果不进行任何验证,由于存在黑客攻击、注入等严重威胁,那么便会有极大的风险。为了解决这个问题,Laravel引入了一个特性,即禁止批量赋值。

不可批量赋值是指,在使用create或者update方法的时候,如果没有指定允许保存的字段,那么程序会自动过滤掉所有非法的字段。这个特性不仅提高了程序的安全性,也加强了对程序员的开发约束:只有明确允许的字段才能保存到数据库中。

通过非常简单的一行代码即可启用这个特性。在需要禁止批量赋值的模型中使用$guarded属性。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $guarded = [];
}

在例子中,$guarded属性是一个空数组,意味着所有的字段都是可编辑的。

如果想要只允许保存特定的字段,可以将$guarded属性设置为一个包含所有不允许编辑的字段的数组,或者使用$fillable属性。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = [&#39;name&#39;, &#39;email&#39;, &#39;password&#39;];
}

更好的做法是在控制器中进行数据验证,验证后再保存到数据库中。这样可以避免一些误操作和安全问题。

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|string',
            'email' => 'required|email|unique:users',
            'password' => 'required|confirmed',
        ]);

        $user = User::create($validatedData);

        return back()->with('success', 'User created successfully.');
    }
}

这里通过validate方法验证了所有输入的字段。如果验证成功,再保存到数据库中。以上代码不仅安全性高,而且代码也很优雅。

总的来说,Laravel的不可批量赋值是一个很完美的机制,能有效地提高程序的安全性。我们应该尽可能地利用这个特性,避免在开发中造成不必要的风险。

以上是laravel怎么启用“禁止批量赋值”特性的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn