0

I am working on yii2. In my view, I have a button which will perform downloading of pdf file. Also, I have drop downs and I want to pass the selected drop-down value from my view to the controller. The drop-down in my index view is.

[ 'label' => 'Sub Division Name', 'value' => function ($d) { if(is_object($d->subdiv)) return $d->subdiv->name; return ' - '; }, 'filter' => Html::activeDropDownList($searchModel, 'sub_div', \common\models\SurveyHescoSubdivision::toArrayList(), ['prompt' => "Sub-Div", 'class' => 'form-control']), ], 

The HTML generated is

<select id="meterssearch-sub_div" class="form-control" name="MetersSearch[sub_div]"> <option value="">Sub-Div</option> <option value="37111" selected="">37111 - HYD SADDAR</option> <option value="37112">37112 - GARI KHATA</option> <option value="37113">37113 - SARFARAZ COLONY</option> <option value="37115">37115 - LIAQAT COLONY</option> <option value="37141">37141 - TANDO ALLAH YAR-I</option> <option value="37142">37142 - TANDO ALLAH YAR-II</option> <option value="37143">37143 - TANDO JAM</option> <option value="37144">37144 - CHAMBER</option> <option value="37151">37151 - HALI ROAD</option> <option value="37152">37152 - RIZVI HOSPITAL</option> <option value="37153">37153 - ALLAMA IQBAL</option> <option value="37154">37154 - SH:UMAID ALI KHAN</option> <option value="37155">37155 - MIRAN M.SHAH</option> <option value="37181">37181 - QASIMABAD</option> <option value="37182">37182 - CITIZEN COLONY</option> <option value="37183">37183 - HIRABAD</option> <option value="37221">37221 - KOTRI</option> <option value="37222">37222 - JAMSHORO</option> <option value="37223">37223 - SHAHBAZ</option> <option value="37225">37225 - NOORIABAD</option> <option value="37226">37226 - SEHWAN SHARIF</option> <option value="37241">37241 - PARETABAD</option> <option value="37242">37242 - PHULELI</option> <option value="37243">37243 - ILYASABAD</option> <option value="37244">37244 - MEMON HOSPITAL</option> <option value="37251">37251 - T.MUHAMMAD KHAN-I</option> <option value="37252">37252 - T.MUHAMMAD KHAN-II</option> <option value="37253">37253 - MATLI</option> <option value="37254">37254 - BULRISHAH KARIM</option> <option value="37271">37271 - THATTA</option> <option value="37272">37272 - SUJAWAL</option> <option value="37273">37273 - MAKLI</option> <option value="37281">37281 - BADIN</option> <option value="37282">37282 - TALHAR</option> <option value="37283">37283 - GOLARCHI</option> <option value="37311">37311 - NAWAB SHAH-I</option> <option value="37312">37312 - NAWAB SHAH-II</option> <option value="37313">37313 - SOCIETY</option> <option value="37314">37314 - DAUR</option> <option value="37315">37315 - SAKRAND</option> <option value="37316">37316 - SAEEDABAD</option> <option value="37318">37318 - QAZI AHMED</option> <option value="37319">37319 - DAULAT PUR</option> <option value="37331">37331 - TANDO ADAM-I</option> <option value="37332">37332 - TANDO ADAM-II</option> <option value="37333">37333 - ODERO LAL</option> <option value="37334">37334 - MATIARI</option> <option value="37335">37335 - HALA</option> <option value="37336">37336 - BHIT SHAH</option> <option value="37341">37341 - SANGHAR</option> <option value="37342">37342 - JHOLE</option> <option value="37343">37343 - SHAHDAD PUR-I</option> <option value="37344">37344 - SHAHDAD PUR-II</option> <option value="37345">37345 - KHIPRO</option> <option value="37346">37346 - SHAHPUR CHAKAR</option> <option value="37347">37347 - SINDHRI</option> <option value="37411">37411 - MIPURKHAS CITY</option> <option value="37412">37412 - SATELLITE TOWN</option> <option value="37413">37413 - HIRABAD MPK</option> <option value="37414">37414 - MIRWAH</option> <option value="37421">37421 - DIGRI</option> <option value="37422">37422 - JHUDO</option> <option value="37423">37423 - NAUKOT</option> <option value="37424">37424 - MITHI</option> <option value="37431">37431 - UMERKOT</option> <option value="37432">37432 - PITHORO</option> <option value="37433">37433 - SAMARO</option> <option value="37434">37434 - KUNRI</option> </select> 

Update 1

My index view code is

Two buttons

<p> <?= Html::a('<i></i> Create Meters', ['create'], ['class' => 'btn btn-success']) ?> <a href="<?= URL::toRoute('meter/report') ?>" type="submit" class="btn btn-primary">Download PDF</a>// on this button click the actionReport() is called </p> 

GridView

<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'description', 'meter_msn', //'meter_type', [ 'label' => 'Meter Type', 'value' => function ($d) { if(is_object($d)) return $d->meter_type; return ' - '; }, 'filter' => Html::activeDropDownList($searchModel, 'meter_type', \app\models\Meters::getMeterTypeValues(), ['prompt' => "Meter Type", 'class' => 'form-control']), ], //'sub_div', [ 'label' => 'Sub Division Name', 'value' => function ($d) { if(is_object($d->subdiv)) return $d->subdiv->name; return ' - '; }, 'filter' => Html::activeDropDownList($searchModel, 'sub_div', \common\models\SurveyHescoSubdivision::toArrayList(), ['prompt' => "Sub-Div", 'class' => 'form-control']), ], //'meter_status', [ 'label' => 'Meter Status', 'value' => function ($d) { return $d->meter_status; }, 'filter' => Html::activeDropDownList($searchModel, 'meter_status', \app\models\Meters::getMeterStatus(), ['prompt' => "Meter Status", 'class' => 'form-control']), ], //'status', [ 'label'=>'Status', 'value'=>function($a){ return $a->getStatusvalue(); } ], [ 'label' => 'Issued User', 'value' => function ($d) { if(is_object($d->user)) //return $d->user->name; return $d->issued_user == '' ? '' : $d->user->username; return ' - '; // return $d->user->name; }, 'filter' => Html::activeDropDownList($searchModel, 'issued_user', \app\models\User::toArrayList(), ['prompt' => "Users", 'class' => 'form-control']), ], [ 'label' => 'Created By', 'value' => function ($data) { if (is_object($data)) return $data->created->name; return ' - '; }, ], 'created_at:date', 'historic', 'comments', ['class' => 'yii\grid\ActionColumn'], ], ]); ?> 

On button click, an action controller is called and inside it, I am trying to access the value of the select sub_div.

function actionReport() { $sub_div = isset($_REQUEST['MetersSearch[sub_div]'])?$_REQUEST['MetersSearch[sub_div]']:''; print_r($sub_div); die(); } 

But it's giving me empty view with no value shown.

How can I access it? Any help would be highly appreciated.

13
  • dropdown should be inside form Commented Apr 10, 2018 at 5:09
  • It is inside the form Commented Apr 10, 2018 at 5:12
  • Try to access like this : $_REQUEST['MetersSearch']['sub_div'] Commented Apr 10, 2018 at 5:13
  • tried with both $_REQUEST['MetersSearch']['sub_div']; it gives me Undefined index: MetersSearch and with isset($_REQUEST['MetersSearch']['sub_div'] )?$_REQUEST['MetersSearch']['sub_div'] :''; it gives me empty view Commented Apr 10, 2018 at 5:22
  • have you check what you get in request using var_dump($_REQUEST) Commented Apr 10, 2018 at 5:24

1 Answer 1

1

You need filter value in Report controller.For that you need to pass values using Querystring.

you can get filter value in view index page as below.

$sub_div = isset($_REQUEST['MetersSearch']['sub_div'])?$_REQUEST['MetersSearch']['sub_div']:''; 

Now to can pass this values to controller.

<a href="<?= URL::toRoute('meter/report').'?sub_div='.$sub_div ?>" type="submit" class="btn btn-primary">Download PDF</a> 

In report controller you will get sub_div

function actionReport() { $sub_div = $_REQUEST['sub_div']; print_r($sub_div); die(); } 
Sign up to request clarification or add additional context in comments.

2 Comments

<a href="<?= URL::toRoute('meter/report').'?sub_div='.$sub_div ?>" type="submit" class="btn btn-primary">Download PDF</a> gives me Undefined variable: sub_div
I was doing in wrong way. Your method works for me :)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.