1

谁能帮我快速了解命名空间和 UserFrosting 环境?

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

问题在于 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
4

2 回答 2

1

$app只是UserFrosting整个应用程序运行的全局实例。由于UserFrostingextends Slim\Slim,您可以使用以下getInstance()方法静态访问它:

$app = UserFrosting::getInstance();

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

于 2016-09-06T15:46:27.360 回答
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();
//...

更多关于 PHP 中的抽象类

于 2016-09-06T08:56:38.013 回答