簡體   English   中英

Yii2 無法在 controller 中獲取提交按鈕名稱

[英]Yii2 unable to get the submit button name in controller

我正在研究yii2 我試圖在我的 controller 中獲取submit button名稱。 下面是我的看法

<div class="form-group">
            <a class="btn btn-default" onclick="window.history.back()" href="javascript:"><i
                        class="fa fa-close"></i>
                Cancel</a>

            <?php if ($model->isNewRecord && in_array(Yii::$app->user->identity->access_level,['admin','manager'])) { ?>

                <?= Html::submitButton('Add' ,['class' => 'btn btn-success','name'=>'a']) ?>
                <?= Html::submitButton('Add & Send Quotation' ,['class' => 'btn btn-info','name'=>'s']) ?>
            <?php } elseif (!$model->isNewRecord && in_array(Yii::$app->user->identity->access_level,['admin'])) {?>
                <?= Html::submitButton('Update', ['class' =>'btn btn-warning']) ?>
            <?php }elseif (!$model->isNewRecord && in_array(Yii::$app->user->identity->access_level,['editor'])){?>

                <?php
                if ($model->reqStatus==\common\models\Accountant::$request_status_titles[0]
                    ||$model->reqStatus==\common\models\Accountant::$request_status_titles[2]
                )
                {

                    echo Html::submitButton('Verified', ['class' =>'btn btn-success','name'=>'v']);
                    echo Html::submitButton('Not-Verified', ['class' =>'btn btn-danger','name'=>'n']);
                }
                ?>

            <?php } elseif (!$model->isNewRecord && in_array(Yii::$app->user->identity->access_level,['manager'])){?>
                <?php
                if ($model->reqStatus==\common\models\Accountant::$request_status_titles[3])
                {
                    echo Html::submitButton('Signed',['class' =>'btn btn-primary','name'=>'g']);
                }
                elseif ($model->reqStatus==\common\models\Accountant::$request_status_titles[4])
                {
                    echo Html::submitButton('Follow-Up',['class' =>'btn btn-primary','name'=>'r']);
                }
                else{
                    echo Html::submitButton('Send Quotation',['class' =>'btn btn-primary','name'=>'q']);
                }
                ?>
            <?php } ?>
        </div>

在上面的代碼中有多個submit button ,每個按鈕都有name 在我的 controller 中,我想獲得Html::submitButton('Verified', ['class' =>'btn btn-success','name'=>'v']); 這和echo Html::submitButton('Not-Verified', ['class' =>'btn btn-danger','name'=>'n']); 這個按鈕。

 if (isset($_POST['v'])) //verified
        {
            $model->load(Yii::$app->request->post());
            $model->reqStatus = Accountant::$request_status_titles[1];
            $model->callVerified = 1;
            $model->clientRef = 'CL-'.uniqid();
            if($model->save())
            {

                return $this->redirect(['view', 'id' => $model->id]);
            }
            return $this->render('update', [
                'model' => $model,
            ]);

        }
        elseif (isset($_POST['n']))//not-verified
        {
            
            $model->load(Yii::$app->request->post());
            $model->reqStatus = Accountant::$request_status_titles[2];

            if($model->save())
            {

                return $this->redirect(['view', 'id' => $model->id]);
            }
            return $this->render('update', [
                'model' => $model,
            ]);
        }
        else
        {
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['view', 'id' => $model->id]);
            }
            return $this->render('update', [
                'model' => $model,
            ]);
        }

當我執行它時。 我能夠看到已verifiednot verified的按鈕。 但是當我點擊其中任何一個時,它不會 go 到if (isset($_POST['v']))esleif (isset($_POST['n']))部分,而是點擊 else 部分。 我在另一個 controller 做同樣的事情,它工作得很好。

更新 1

根據scaisEdge評論,我嘗試了var_dump($_POST) ,下面是結果

array(2) {
    ["_csrf-backend"]=> string(88) "xS7Ctb2C677HKQJjoBL2SPznK3IHVGUDSn7MGhMs9SigHov36PSI7J9OewzkSJ0AzpBYN0A_KTIlEIZfd1qiYQ=="
    ["Bookkeeping"]=> array(43) {
        ["name"]=> string(5) "Laeeq"
        ["conNumb"]=> string(11) "03464394600"
        ["email"]=> string(15) "laeeq@gmail.com"
        ["location"]=> string(12) "Amber Valley"
        ["reqConcerns"]=> string(22) "UK_limited_partnership"
        ["workStart"]=> string(21) "PROJECT_START_2_MONTH"
        ["businessName"]=> string(27) "Retail_consumer_merchandise" 
        ["reqPurpose"]=> string(40) "Select between several bookkeeper quotes" 
        ["bookAssign"]=> string(16) "One_time_project"
        ["bookkRequire"]=> string(32) "Only local bookkeepers can quote"
        ["bookWork"]=> string(15) "Annual accounts"
        ["companyName"]=> string(22) "NONPROFIT_ORGANIZATION"
        ["turnOver"]=> string(17) "£300,000-600,000"
        ["info"]=> string(7) "Testing"
        ["remarks"]=> string(15) "Client Verified"
        ["annualConf"]=> string(0) ""
        ["personalTaxRetHrmc"]=> string(0) ""
        ["mPaySlip"]=> string(0) ""
        ["mRtiPenRet"]=> string(0) ""
        ["annualAcc"]=> string(0) ""
        ["annualCorpTaxRet"]=> string(0) ""
        ["annualCorpTaxRetHrmc"]=> string(0) ""
        ["qVatRet"]=> string(0) ""
        ["qBookMtd"]=> string(0) ""
        ["insuranceHmrc"]=> string(0) ""
        ["corpTaxPlan"]=> string(0) ""
        ["persTaxPlan"]=> string(0) ""
        ["businessAdvice"]=> string(0) ""
        ["fedTax"]=> string(0) ""
        ["provTax"]=> string(0) ""
        ["invPerM"]=> string(0) ""
        ["invPerMPrice"]=> string(0) ""
        ["add1"]=> string(0) ""
        ["add2"]=> string(0) ""
        ["add3"]=> string(0) ""
        ["add4"]=> string(0) ""
        ["add5"]=> string(0) ""
        ["add6"]=> string(0) ""
        ["add7"]=> string(0) ""
        ["add8"]=> string(0) ""
        ["add9"]=> string(0) ""
        ["add10"]=> string(0) ""
        ["remarks2"]=> string(0) "" 
    }
}

上述結果中沒有v字符串。

我一定錯過了一些我不知道的東西。

任何幫助將不勝感激。

<?php $form = ActiveForm::begin() ?>

在開始表格和結束表格之前,您是否正在使用它?

您的代碼很難閱讀,因此您需要為簡單起見對其進行重構。 如果我理解正確,您有一些條件,並且您希望出現不同的提交按鈕。

首先,沒有任何條件需要用戶輸入,因此您可以簡單地執行 model 中的邏輯。

例如

$model->isNewRecord && in_array(Yii::$app->user->identity->access_level,['admin','manager']

不需要用戶輸入,因此您可以在 model 端進行處理。

我認為@Lionel Yeo 是對的。 你的代碼太復雜了。 它應該在許多視圖中分開,controller 動作。 另一種選擇是您可以使用 Yii 生成的 html 鏈接與 GET 參數。 如果我正確閱讀了您的代碼..

如果您想查看傳入的 POST 數據.. - 只需在 controller 中打印Yii::$app->request->post()

我有同樣的問題,它似乎是因為我正在使用它

'enableClientScript' => false,

在 ActiveForm::begin()

主要問題是您沒有將值發送回名稱。

看看這個答案:

表單發布時發送提交按鈕的值

簡而言之,您的 html 標記應如下所示:

<button type="submit" name="submit" value="Signed">Signed</button>
<button type="submit" name="submit" value="Follow-Up">Follow-Up</button>

在 Yii2 視圖中:

Html::submitButton('Signed',['class' =>'btn btn-primary','name' => 'submit', 'value' =>'Signed'])

在 Yii2 controller 中:

if(Yii::$app->request->post('submit') === 'Signed') {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM