传递给View的Controller的参数没有在php中获取

时间:2014-12-01 07:32:31

标签: php mysql yii

我正在使用

  

PHP语言,yii-1.1.13框架和MySQL DB。

查看主页的代码。

 <?php
/**
 * The view for the trip schedules page.
 * @uses ManageTripSchedulesForm        $model
 * @uses VoyageServiceClassInfo         $voyageServiceClassInfo
 * @uses LocationInfo                   $locationInfo
 * @uses PierInfo                       $pierInfo
 * @uses VesselInfo                     $vesselInfo
 * @uses ServiceClassInfo               $serviceClassInfo
 * @uses FareSetInfo                    $fareSetInfo
 * @uses SearchTripsForm                $searchTripsForm
 * @uses FerryOperatorInfo              $ferryOperatorInfo
 * @uses ManageTripSchedulesFilterForm  $filterForm
 */

    $this->setPageTitle(SystemConstants::SITE_NAME . ' - Trip Schedules');

    $baseUrl = Yii::app()->getBaseUrl();
    $cs = Yii::app()->getClientScript();

    // --- POS_HEAD
    // a plug-in used in manageTripSchedules.js
    $cs->registerScriptFile($baseUrl . '/js/jquery.blockUI.js', CClientScript::POS_HEAD);

    // for this view
    $cs->registerCssFile($baseUrl . '/css/manageTripSchedules.css');
    $cs->registerScriptFile($baseUrl . '/js/manageTripSchedules.js', CClientScript::POS_HEAD);


    $this->endWidget('zii.widgets.jui.CJuiDialog');

    /**
     * Maintenance Dialog widget
     */
    $this->beginWidget('zii.widgets.jui.CJuiDialog',array(
        'id'=>'dialog',
        'options' => array(
                'title' => 'Trip Schedules',
                'autoOpen' => false,
                'modal' => true,
                'resizable' => false,
                'width' => 600,
                'dialogClass' => 'tripschedules-dialog-class',
                'show'=>array(
                        'effect'=>'drop',
                        'duration'=>500,
                ),
                'hide'=>array(
                        'effect'=>'drop',
                        'duration'=>500,
                ),
        ),

    ));

    /**
     * Render the maintenance dialog view.
     */
    echo $this->renderPartial('manageTripSchedulesDialog', array(
            'model' => $model,
            'ferryOperatorInfo' => $ferryOperatorInfo,
            'locationInfo' => $locationInfo,
            'pierInfo' => $pierInfo,
            'vesselInfo' => $vesselInfo,
            'serviceClassInfo' => $serviceClassInfo,
            'fareSetInfo' => $fareSetInfo
    ));

    $this->endWidget('zii.widgets.jui.CJuiDialog');

    <div id="grid-container" class="grid-div">
    <?php
        $pageSize = 10;
        $helper = new TripSchedulesGridHelper($this);
        $this->widget('zii.widgets.grid.CGridView', array(
            'id' => 'tripschedules-grid',
            'dataProvider' => $voyageServiceClassInfo->searchTripSchedules(Yii::app()->user->ferry_operator_id, $filterForm, $pageSize),
            'emptyText' => 'No data found.',
            'selectableRows' => 0,
            'template' => '{items}{pager}',     // to remove summary header
            'pager' => array(
                'header' => '',                 // to remove 'Go to page:'
            ),
            'cssFile' => $baseUrl . '/css/manageTripSchedulesGrid.css',
            'columns' => array(
                array(
                        'name' => 'id',
                        'value' => '$data->voyage_service_class_id',
                        'headerHtmlOptions' => array('style' => 'display:none'),
                        'htmlOptions' => array('style' => 'display:none'),
                ),
                'voyage.ferry_operator.name::Operator',
                array(
                        'name' => 'Origin',
                        'value' => array($helper, 'formatOriginTerminal'),
                ),
                array(
                        'name' => 'Destination',
                        'value' => array($helper, 'formatDestinationTerminal'),
                ),
                array(
                        'name' => 'DepartureTime',
                        'header' => 'Departure',
                        'value' => array($helper, 'formatDepartureDate'),
                ),
                array(
                        'name' => 'ArrivalTime',
                        'header' => 'Arrival',
                        'value' => array($helper, 'formatArrivalDate'),
                ),
                array(
                        'name' => 'TripHrs',
                        'header' => 'Trip Hrs',
                        'value' => array($helper, 'formatTripDuration'),
                ),
                'voyage.vessel.name::Vessel',
                'service_class.name::Service Class',
                'fare_set.fare_type::Fare Set',
                array(
                        'class' => 'CButtonColumn',
                        'template'=>'{update}{delete1}',
                        'buttons'=>array(
                            'update' => array(
                                'label'=>'Edit',
                                'imageUrl'=>Yii::app()->baseUrl.'/images/gridview/update.png',
                                'url'=>'"#"',
                                'click'=>'function(){updateTripScheduleJs($(this).parent().parent().children(":nth-child(1)").text());}',
                            ),
                            'delete1' => array(
                                'label'=>'Delete',
                                'imageUrl'=>Yii::app()->baseUrl.'/images/gridview/delete.png',
                                'url'=>'"#"',
                                'click'=>'function(){deleteTripScheduleJs($(this).parent().parent().children(":nth-child(1)").text());}',
                            ),
                        ),
                ),
            ),
        ));
    ?>
</div>

查看添加/编辑对话框的代码。

 <?php
    echo $form->dropDownList($model, 'service_class_id',
    $serviceClassInfo->getAllServiceClassesForSelection2($model->ferry_operator_id,
    $this->_ferryOperatorId , true, 'Select class'),
    array(
    'id' => 'service_class_id',
    'class' => 'selectbox',
    'ajax' => array(
    'type'=>'POST',
    'url'=>CController::createUrl('loadFareSet'), 
    'update'=>'#fare_set_id', 
    'data'=>array('service_class_id'=>'js:this.value'),
        ))
    );
   ?>

在我的控制器中,下面是我的代码。

 <?php

    class SiteController extends Controller
    {   

    public $_ferryOperatorId;

    public function actionRetrieveTripSchedule() {
            $voyageServiceClassInfo = new VoyageServiceClassInfo;

            if (isset($_POST['id']))
            {
                if (Yii::app()->request->isAjaxRequest)
                {
                    $voyageServiceClassInfo = VoyageServiceClassInfo::model()->with('voyage')->findByPk($_POST['id']);

                    if ($voyageServiceClassInfo != null)
                    {
                        $this->_ferryOperatorId = '3';

                        $_json = array(
                            array('name'=>'voyage_service_class_id', 'value'=>$voyageServiceClassInfo->voyage_service_class_id),
                            array('name'=>'ferry_operator_id', 'value'=>$voyageServiceClassInfo->voyage->ferry_operator_id),
                            array('name'=>'origin_location_id', 'value'=>$voyageServiceClassInfo->voyage->origin_location_id),
                            array('name'=>'origin_pier_id', 'value'=>$voyageServiceClassInfo->voyage->origin_pier_id),
                            array('name'=>'destination_location_id', 'value'=>$voyageServiceClassInfo->voyage->destination_location_id),
                            array('name'=>'destination_pier_id', 'value'=>$voyageServiceClassInfo->voyage->destination_pier_id),
                            array('name'=>'departure_date', 'value'=>$voyageServiceClassInfo->voyage->departure_date),
                            array('name'=>'departure_time', 'value'=>$voyageServiceClassInfo->voyage->departure_time),
                            array('name'=>'arrival_date', 'value'=>$voyageServiceClassInfo->voyage->arrival_date),
                            array('name'=>'arrival_time', 'value'=>$voyageServiceClassInfo->voyage->arrival_time),
                            array('name'=>'vessel_id', 'value'=>$voyageServiceClassInfo->voyage->vessel_id),
                            array('name'=>'service_class_id', 'value'=>$voyageServiceClassInfo->service_class_id),
                            array('name'=>'fare_set_id', 'value'=>$voyageServiceClassInfo->fare_set_id),
                            );

                            echo CJSON::encode(array(
                                            'status'=>'success',
                                            'messages'=>"Target data is retrieved normally.",
                                            'val'=>$_json,
                            ));
                    }
                    else
                    {
                        echo CJSON::encode(array(
                                'status'=>'failure',
                                'messages'=>"Target data can not be retrieved from server.",
                                'val'=>$_json,
                        ));
                    }
                }
            }
        }
    }

服务类下拉列表的模型代码。

public function getAllServiceClassesForSelection2(
            $operatorId = null, $operatorIdEdit = null, $addInstructionRow = false, $instruction = null)
    {
        $serviceClassArray = array();

        if ($addInstructionRow) {
            if ($instruction == null) {
                $instruction = 'Select a ServiceClass';
            }

            $serviceClassArray += array('' => $instruction);
        }

        $criteria = new CDbCriteria;
        $criteria->select = 'service_class_id, name';
        if ($operatorId != null || $operatorId != '')
        {
            $criteria->condition = 'ferry_operator_id = ' . $operatorId;
        }
        if ($operatorIdEdit != null || $operatorIdEdit != '' && $model->operation_mode == AdminGeneralHelper::OPERATION_MODE_UPDATE)
        {
            $criteria->condition = 'ferry_operator_id = ' . $operatorIdEdit;
        }
        $criteria->order = 'name';

        $servceClassInfos = $this->findAll($criteria);


        foreach ($servceClassInfos as $servceClassInfo) {
            $serviceClassArray += array(
                    $servceClassInfo->service_class_id => $servceClassInfo->name,
            );
        }

        return $serviceClassArray;
    }

在我的JS文件中,下面是我的代码。

function updateTripScheduleJs(id) {
// Get target data via controller and set values to fields of dialog.
$.blockUI({
    message: "Loading data...",
});

$("#dialog-msg").html("");          // clear the message area of dialog
// Ajax request
$.ajax({
    url: 'retrieveTripSchedule',
    type: 'POST',
    datatype: 'json',
    data: $.parseJSON('{"id": '+id+'}'),
    timeout: 20000,
    beforeSend: function(){
    },
    success: function(data){
        $.unblockUI();
        var res = eval('(' + data + ')');
        if (res.status == 'success'){
            for (var idx in res.val){
                if (res.val[idx].name == 'departure_time' || res.val[idx].name == 'arrival_time'){
                    $('#'+res.val[idx].name).attr('value',formatAMPM(res.val[idx].value));
                } else {
                    $('#'+res.val[idx].name).attr('value',res.val[idx].value);
                }
            }
            $("#operation_mode").attr('value','U');         // Set update mode
            $(".submit-button").attr('value','Update Trip Schedule');   // Set submit button label
            $(".update-only-div").css('display','block');   // Show columns for update
            $(".create-only-div").css('display','none');    // Hide columns for update
            $("#dialog").dialog("open");

        } else {
            alert("Trip Schedule does not exist. It may be deleted by other user");
            $.fn.yiiGridView.update('tripschedules-grid');  // Refresh the list of service class.
        }

    },
    error: function(){
        $.unblockUI();
        alert("Ajax Communication Error. Please contact system administrator.");
    }
}
);

}

以下是情景:

  1. 我点击铅笔图标,对话框会显示。它将加载所有         细节取决于所选行。这是对的。
  2. 它会加载所有细节。这是对的。
  3. 否。服务类的下拉列表中的值是错误的。
  4. 我的服务类预期输出仅为4(基于数据库),但实际上,显示了所有服务类。
  5. 我从视图中使用的控制器中发现了$this->_ferryOperatorId = '3' ($serviceClassInfo->getAllServiceClassesForSelection2($model->ferry_operator_id, $this->_ferryOperatorId , true, 'Select class')) 没有价值。 在我的模型代码中,如果ferryOperatorId = null,它将显示所有 服务类。
  6. 我的问题是从控制器获取$this->_ferryOperatorId的值的正确代码是什么 然后在视图中使用该值。 :(

    请帮我解决这个问题。

0 个答案:

没有答案