2016-03-03 63 views
0

我想動態創建模型的實例。這可能與yii2?Yii2中動態聲明模型

我想這樣

<?php 

namespace app\components; 

use Yii; 
use yii\base\Component; 
use yii\base\InvalidConfigException; 
use yii\web\NotFoundHttpException; 


use app\models; 


class SintelComponent extends Component 
{ 

public function find($model_name, $id) 
{ 
    $magic = __NAMESPACE__.'\\'.$model_name; //__NAMESPACE__ is a magic constant 
    if (($model = $magic::findOne($id)) !== null) 
    { 
     return $model; 
    } 
    else 
    { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 
} 

$ MODEL_NAME東西是模型的名稱。當我嘗試這方面,我得到這樣

語法錯誤,意外「$ MODEL_NAME」(T_VARIABLE)的錯誤,希望 標識符(T_STRING)

+0

請參閱[名稱空間常見問題](http://php.net/manual/en/language.namespaces.faq.php#language.namespaces.faq.quote) –

回答

1

我不能對此進行測試(我「我的手機上M),但你可以嘗試這樣做是這樣的:

public function find($model_name, $id) 
{ 
    $_model = '\app\\models\\'.$model_name; 
    if (($model = $_model::findOne($id)) !== null) 
    { 
     return $model; 
    } 
    else 
    { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 
+0

我得到了這樣的錯誤調用成員函數findOne ()在一個非對象,當我嘗試它。 – Bloodhound

+0

請參閱我的編輯,我認爲'模型'應該有兩個'''在它之前。 – morcen

+0

我仍然有這個錯誤。 – Bloodhound

0

你可以試試這個方法:

namespace app\models; 
public function find($model_name, $id) 
{ 
    $magic = __NAMESPACE__.'\\'.$model_name; //__NAMESPACE__ is a magic constant 
    if (($model = $magic::findOne($id)) !== null) 
    { 
     return $model; 
    } 
    else 
    { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 

注意:僅適用於當前命名空間。

+0

我試着當你說,但我得到一個類'應用程序\組件\組織'找不到錯誤。 – Bloodhound

+0

@血獵犬。你只能訪問一個名字空間,如果你在組件中使用它,那麼你的名字空間將是'app \ components'。 –

+1

@血獵犬。你還需要'php.net/manual/en/language.namespaces.definitionmultiple.php' –