Как расширить родительский объект данных до дочернего объекта в php7 для доступа к родительским данным Symfony 5 - PullRequest
0 голосов
/ 28 мая 2020
• 1000 Надеюсь, мое разъяснение проясняет это.

Раньше я вводил класс BaseHelper по зависимости, но это вызывало проблемы с удобочитаемостью, поскольку файлы становились больше и требовали дополнительных услуг.

namespace App\Helpers\Users\Profiles;

use App\Core\BaseHelper;

class ProfileHelper
{
    public function __construct(BaseHelper $helper)
    {
        $this->base = $helper;
        $this->data = $this->base->data;
    }

    public function getPageData()
    {
        return $this->data;
    }
}

Используемый файл BaseHelper для вызова пользовательских функций, которые указаны c для basehelper и не вызываются из какого-либо другого файла:

namespace App\Core;

use App\Services\security\SecurityService;
use App\Services\users\UserService;

class BaseHelper
{
    private $security;
    private $user;

    public function __construct(SecurityService $security, UserService $user)
    {
        $this->sec = $security;
        $this->user = $user;
        $this->data = $this->checkUserExists();
    }

    private function checkUserExists()
    {
        if ($this->sec->isLoggedIn()) {
            $this->identity = $this->sec->data();
            return $data = $this->user->parseUser($this->identity->getUserCode());
        } else {
            return $data = (object) [];
        }
    }
}

ProfileHelper затем извлекает объект данных и добавляет данные c страницы, здесь возникает ошибка появляется, поскольку в нем говорится, что объект $ data не определен:

namespace App\Helpers\Users\Profiles;

use App\Core\BaseHelper;

class ProfileHelper extends BaseHelper
{
    public function __construct()
    {
        $this->data = $this->data;
    }


    public function getPageData()
    {
        return $this->data;
    }
}

Я экстраполировал соответствующий код, чтобы показать пример ошибки, в основные файлы введено гораздо больше служб, поэтому я пытается расширить basehelper для доступа к свойству данных. Проект построен с использованием symfony 5

1 Ответ

0 голосов
/ 28 мая 2020

Вы не можете построить дочерний класс, не создав родительский класс. В своем потомке вызовите parent::_construct() и введите необходимые аргументы. Затем будут определены $data, $user и $sec.

class ProfileHelper extends BaseHelper
{
    protected $data;

    public function __construct(SecurityService $security, UserService $user , AssetService $assets, SocialService $social)
    {
        parent::_construct($security, $user);
        $this->assets = $assets;
        $this->social = $social;
        $this->data = $this->data;
    }
...

Для получения дополнительной информации см. Конструкторы и деструкторы PHP .

...