2016-09-06 94 views
1

任何人都可以給我一個名稱空間和UserFrosting環境的快速手?如何從UserFrosting的另一個類中訪問配置變量?

爲了解釋我的問題,我使用TCPDF從UserFrosting內的數據創建PDF文檔。我在UserFrosting命名空間中創建了一個自定義類MyPDF,因此我可以通過鍵入$pdf = new MyPDF(blahblah);在UF命名空間內創建一個PDF,並且工作正常。

的問題是與MyPDF類本身 - 我需要能夠從UF參考配置瓦爾和不知道我怎麼能做到這一點 - 即:

namespace UserFrosting; 

class MyPDF extends \TCPDF_TCPDF { 

    public function Header() { 
     $image_location = $this->_app->config('upload.path') 

如何訪問config從在MyPDF之內? :?:

我已經試過:

class MyPDF extends \TCPDF_TCPDF { 

public function Header() { 
    $ufapp = new UFModel(); 
    $image_location = $ufapp->config('upload.path') 

...但沒有骰子。我得到這個錯誤:

Cannot instantiate abstract class UserFrosting\UFModel 

回答

1

$app只是整個應用程序運行的全局實例UserFrosting。由於UserFrosting延伸Slim\Slim,您可以靜態地使用getInstance() method訪問:

$app = UserFrosting::getInstance();

一種更好的方式,但是,將實際傳遞$app到您的MyPDF構造。但是,根據您的情況以及您使用的其他地方MyPDF,這可能會更困難。

+0

Thanks @alexw - 我知道你會有一個簡單的解決方案!:) – nockieboy

0

它用錯誤:你不能實例化一個抽象類。創建從UFModel開始的類並實現此類中的所有抽象方法。

例如,如果你的UFModel類看起來是這樣的:

<?php 

abstract class UFModel 
{ 
    abstract public function getValue(); 
} 

你應該創建它擴展此類和實現所有的抽象方法類:

<?php 

class MyModel extends UFModel 
{ 
    public function getValue() 
    { 
     return 'exampleValue'; 
    } 
} 

現在你可以使用new創建對象運營商:

<?php 

//... 
$ufapp = new MyModel(); 
//... 

More about abstract classes in PHP

+0

但MyPDF類需要擴展TCPDF_TCPDF。 MyPDF正在一個擴展UserFrosting \ BaseController類的類中實例化 - '$ pdf = new MyPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false);'嗯..我很困惑這個,對不起,如果問題不明確.. :( – nockieboy

+0

但是錯誤是關於實例化'UFModel',而不是'MyPDF'類。 – aslawin

+0

是的,對不起 - 我只是想找到一個解決方案,並在黑暗中摸索這個問題是我需要訪問$ app,這是我調用'new MyPDF()'的類的實例,如果沒有這個,我不能訪問'config []'vars MyPDF class – nockieboy

相關問題