如何从 UserFrosting 中的另一个 class 访问配置变量?

How to access config vars from within another class in UserFrosting?

谁能帮我快速掌握命名空间和 UserFrosting 环境?

为了解释我的问题,我使用 TCPDF 从 UserFrosting 中的数据创建 PDF 文档。我在 UserFrosting 命名空间中创建了一个自定义 class、MyPDF,因此我可以通过键入 $pdf = new MyPDF(blahblah); 在 UF 命名空间中创建一个 PDF,并且工作正常。

问题出在 MyPDF class 本身 - 我需要能够从 UF 引用配置变量,但不知道我该怎么做 - 即:

namespace UserFrosting;

 class MyPDF extends \TCPDF_TCPDF {

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

如何从 MyPDF 中访问 config? :?:

我试过:

class MyPDF extends \TCPDF_TCPDF {

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

...但没有骰子。我收到此错误:

Cannot instantiate abstract class UserFrosting\UFModel

写错了:你不能实例化一个抽象class。创建从 UFModel 扩展的 class 并实现此 class.

的所有抽象方法

例如,如果您的 UFModel class 看起来像这样:

<?php

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

您应该创建 class 来扩展此 class 并实现所有抽象方法:

<?php

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

现在您可以使用 new 运算符创建对象:

<?php

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

More about abstract classes in PHP

$app 只是整个应用程序运行的 UserFrosting 的全局实例。由于 UserFrosting 扩展了 Slim\Slim,您可以使用 getInstance() method:

静态访问它

$app = UserFrosting::getInstance();

不过,更好的方法是实际将 $app 传递给 MyPDF 构造函数。但是,根据您的情况以及您在其他地方使用 MyPDF,这可能会更加困难。