سؤال

I am trying to modify 1 controller to work with 2 models. This is what I have done with loadModel function in my controller

public function loadModel($id, $_model)
{
    if (isset($_model)){
        $model=$_model::model()->findByPk($id); // syntax error, unexpected "::"
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    } else {
        $model=Foods::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
}

As you can see I want to create optional parameter for this function where second parameter will be the Model. Can you help me to achieve this?

هل كانت مفيدة؟

المحلول

You can't use string as class name to call static method. Just instantiate model and call findByPk:

if (isset($_model)){
    $model = new $_model;
    $model= $model->findByPk($id);

نصائح أخرى

Perhaps it would be better

/**
* @var integer $id
* @var string $_model name model class
*/
       public function loadModel($id, $_model = 'Foods'){
                $model = new $_model;
                $model= $model->findByPk($id);
                if($model===null)
                    throw new CHttpException(404,'The requested page does not exist.');
                return $model;
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top