2

2 つのモデルで動作するように 1 つのコントローラーを変更しようとしています。これは、コントローラーの loadModel 関数で行ったことです

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;
    }
}

ご覧のとおり、この関数のオプションのパラメーターを作成したいと思います。ここで、2 番目のパラメーターはモデルになります。これを達成するのを手伝ってもらえますか?

4

2 に答える 2

2

文字列をクラス名として使用して静的メソッドを呼び出すことはできません。モデルをインスタンス化して呼び出すだけfindByPkです:

if (isset($_model)){
    $model = new $_model;
    $model= $model->findByPk($id);
于 2013-09-17T09:42:17.483 に答える
1

そのほうがいいかも

/**
* @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;
        }
于 2013-09-17T09:59:20.723 に答える