由于我使用的形式是csrf,因此在请求函数中传递的数组$data
永远不会为空。
如何解决此问题,以便在提交表单而未填写任何输入字段的情况下,我得到“数据为空”?
<form action="{{url('/userdata')}}" method="POST">
@csrf
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control" name="name">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
public function userdata(Request $request){
$data=$request ->all();
if(!empty($data)){
echo "data is filled";
}else{
echo "data is empty";
}
}
答案 0 :(得分:0)
对不起,我在第一个答案上误解了您的问题。即使输入元素为空,也将始终为页面上的输入元素提交值。正确的方法是创建一个request validation。
创建类似此类的东西,尽管我确信它更整洁;)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserdata extends FormRequest {
public function authorize() {return true;}
public function rules() {
return ["name" => ["required", "max:64"]];
}
}
然后编辑控制器方法的签名,以便与其期望Request
而不是寻找您的验证类(不要忘记上面的use
语句):
public function userdata(StoreUserdata $request){
// ....
}
现在,如果name
输入为空或太长,您的请求将失败。有a lot of possible validation rules。
答案 1 :(得分:0)
如果您不希望表单为空,则可以在输入字段中使用必填。
<form action="{{url('/userdata')}}" method="POST">
@csrf
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control" name="name" required>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
否则,如果name是您唯一的字段,则可以执行以下操作:
public function userdata(Request $request){
$data = $request->except(["_token"]);
if($data['name'] != ""){
echo "data is filled";
} else {
echo "data is empty";
}
}
答案 2 :(得分:0)
您可以使用get()
方法:
public function userdata(Request $request){
$data = $request->get("_token");
if(!empty($data)){
echo "data is filled";
} else {
echo "data is empty";
}
}