试图从窗体到控制器获取复选框的值

时间:2019-04-26 15:17:30

标签: php laravel model-view-controller

我正在尝试做一些事情,以便在选中复选框控件时可以上传照片。我让客户端正常工作,这样,当选中此复选框时,将显示上载控件,并且表单可以正确验证。

但是,在我的控制器中,如果我的复选框被选中(true),则调用某种方法需要采取一些措施。如果未选中(false),我将执行其他一些操作。

在我的html页面中,我有以下内容:

class HelloWorklet {
    constructor(audioContext) {
        audioContext.audioWorklet.addModule('helloprocessor.js').then(() => {
            this.awNode = new AudioWorkletNode(audioContext, 'hello-processor');
            this.awNode.port.onmessage = (event) => {
                switch (event.data.action) {
                case 'response message':
                    this.respondMessage(event.data);
                    break;
                }
            }
        });
    }
    requestMessage = () => {
        return new Promise((resolve, reject) => {
            this.resolve = resolve;
            this.reject = reject;
            this.awNode.port.postMessage({action: 'request message'});
        })
    }
    respondMessage = (data) => {
        // some time consuming processing
        let msg = data.msg + '!';
        this.resolve(msg);
    }
}

let audioCtx = new AudioContext();
let helloNode = new HelloWorklet(audioCtx);

async function requestMessage() {
    let msg = await helloNode.requestMessage();
    // additional processing
    console.log(msg);
}

但是,我现在只想在控制器中查看我的复选框中是否获得正确的值。为此,我做了一些简单的事情:

<form action="/supplier/submit/plan" method="post" role="form" id="plan-form">
...   
   <input name="checkingPhotos" type="checkbox" id="chkPhotos" />
   <label for="chkPhotos">I want to include photos in this plan.</label>
...
</form>

无论我是否选中此复选框,结果均为 public function submitPlan(Request $request) { $checkboxValue = $request->input('checkingPhotos'); dd($checkboxValue); } 。我的路线也像这样:

null

有人可以告诉我我在做什么错吗?我只想在控制器方法中看到值1 / True或0 / False。

3 个答案:

答案 0 :(得分:0)

如果是复选框,则应将输入名称修改为

<input name="checkingPhotos[]" type="checkbox" id="chkPhotos" />

然后,您应该可以使用它获取所需的值

$request->input('checkingPhotos');

答案 1 :(得分:0)

似乎您的问题出在您的路线上,将其更改为

Route::post('/supplier/submit/plan', 'SupplierController@submitPlan');

答案 2 :(得分:0)

真正的问题是您的复选框没有值。添加一个值,您的问题就解决了。应该是:

<input name="checkingPhotos" type="checkbox" id="chkPhotos" value="1" />

[]创建一个数组

迪伦·卡斯(Dylan Kas)提交的关于更改名称以添加[]的答案是可行的,但这并不是出于您的考虑。让我们看一下:

<input name="checkingPhotos[]" type="checkbox" id="chkPhotos" />

将传递帖子字符串:

 checkingPhotos[]=On

其中使用PHP will automatically be turned into an array

参考框架挑战

为什么首先要有一个复选框?需要复选框吗?为什么不检查文件是否存在。

$validated = $request->validate([
    //... other fields here.
    'image' => 'mime:png,gif,jpeg|max:10000' //set max to file size limit you want
]);
$plan = new SupplierPlan($validated);
if($request->has('image')){
   $plan->image = $request->image->store();
}
$plan->save();
// ... flash message, return view or redirect