在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 = ['name', 'email', 'password']; }
更好的做法是在控制器中进行数据验证,验证后再保存到数据库中。这样可以避免一些误操作和安全问题。
<?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中文网其他相关文章!