2013-12-17 20 views
1

我定義的方法在ATK4與表達領域是:

$this->addExpression('answered')->set(function($model,$select){ 
    return $select->dsql() 
      ->table('answer') 
      ->field($select->expr('if(count(*)>0,"Y","") as answered')) 
      ->where('usecollection_id',$select->getField('id')) 
      ->where('student_id',$this->api->auth->get('id')); 

    })->type('boolean')->caption('Besvaret'); 

它的工作原理我的開發機上很好,但在生產服務器它拋出一個致命錯誤:PHP的致命錯誤:使用$這個時候不要在file.php

這是問題的行對象上下文:

$this->api->auth->get('id') 

任何想法是什麼原因造成這種差異,以及如何使它工作?

回答

3

一種方式是通過$這封閉的功能是這樣的:

$self = $this; 
$this->addExpression('answered')->set(function($model,$select)use($self){ 
    echo $self->api->auth->get('id'); 
}); 

這就是你應該經常傳遞變量匿名PHP中的函數。

在這種特殊情況下的另一種可能性是簡單地使用$select->api->...,$model->api->...或任何其他ATK4對象而不是this->api->...。這是因爲所有ATK4對象都具有API類的引用,因此$whateverObject->api->...將始終工作並始終指向相同的API類對象。

+0

只需將$ this更改爲$ select即可。很簡單。謝謝。 – jeppeb

+0

啊,看,告訴你有更好的方法:)謝謝DarkSide! –

0

您正在引用一個變量($ this),該變量未在函數中傳遞或聲明(您正在向函數傳遞$ model和$ select)。

我不夠聰明,告訴你解決這個問題的最好方法,也許你可以在函數前面定義$ auth_id(設置爲$ this-> api-> auth-> get('id'))被調用並將該變量傳遞給它?

有註定是雖然一個更好的辦法...

相關問題