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

在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([
            &#39;name&#39; => &#39;required|string&#39;,
            &#39;email&#39; => &#39;required|email|unique:users&#39;,
            &#39;password&#39; => &#39;required|confirmed&#39;,
        ]);

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

        return back()->with(&#39;success&#39;, &#39;User created successfully.&#39;);
    }
}

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

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

以上就是laravel怎么启用“禁止批量赋值”特性的详细内容,更多请关注其它相关文章!