Может ли кто-нибудь дать мне быструю руку с пространствами имен и средой UserFrosting?
Чтобы объяснить мою проблему, я использую TCPDF для создания PDF документа из данных в UserFrosting. Я создал собственный класс MyPDF в пространстве имен UserFrosting, чтобы я мог создать PDF в пространстве имен UF, набрав $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
$app
это просто глобальный пример UserFrosting
что все приложение работает на. поскольку UserFrosting
продолжается Slim\Slim
, вы можете получить к нему доступ статически, используя getInstance()
метод:
$app = UserFrosting::getInstance();
Тем не менее, лучшим способом было бы $app
в ваш MyPDF
конструктор. Тем не менее, в зависимости от вашей ситуации и где вы еще используете MyPDF
Это может быть сложнее.
Это написано по ошибке: вы не можете создать экземпляр абстрактного класса. Создать класс, который простирается от 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();
//...