2016-09-06 129 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

相关问题