2017-01-17 6 views
0

Я получаю следующее сообщение об ошибке для пользовательского модуля на компиляции в Magento 2.1.3Magento2: Вызов защищенного класса, ошибка компиляции: Неправильная зависимость

Incorrect dependency in class NAMESPACE\MODULE\Block\SOMEBLOCK in /home/www/app/code/namespace/module/Block/Someblock.php 
\Magento\Framework\Filesystem already exists in context object 

Вкратце, блочный код выглядит следующим образом;

namespace Namespace\Module\Block; 

use Magento\Framework\App\Filesystem\DirectoryList; 

class Someblock extends \Magento\Framework\View\Element\Template { 

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context, 
    \Magento\Framework\Filesystem $filesystem, 
    array $data = [] 
) 
{ 
    $this->_fileSystem = $filesystem; 
    parent::__construct($context, $data); 
} 

} 

Вопрос заключается в том, что код инъекционный \ Magento \ Framework \ Filesystem в конструкции, когда она уже существует в унаследованном родительском классе.

Для частных лиц я знаю, что мы можем назвать тех, кто находится внутри класса блоков;

$this->someclass 

Но как мы называем частные? Я пробовал это;

namespace Namespace\Module\Block; 

use Magento\Framework\App\Filesystem\DirectoryList; 

class Someblock extends \Magento\Framework\View\Element\Template { 

public function __construct(
    \Magento\Framework\View\Element\Template\Context $context, 
    //\Magento\Framework\Filesystem $filesystem, 
    array $data = [] 
) 
{ 
    //$this->_fileSystem = $filesystem; 
    parent::__construct($context, $data); 
} 

public function dosomething() { 

    $fileSystem = $this->_fileSystem; 
} 

} 

Но я получаю $ _filesystem не определено.

Вот конструктор из родительского класса \ Magento \ Framework \ View \ Элемент \ Template

public function __construct(Template\Context $context, array $data = []) 
{ 
    $this->validator = $context->getValidator(); 
    $this->resolver = $context->getResolver(); 
    $this->_filesystem = $context->getFilesystem(); 
    $this->templateEnginePool = $context->getEnginePool(); 
    $this->_storeManager = $context->getStoreManager(); 
    $this->_appState = $context->getAppState(); 
    $this->templateContext = $this; 
    $this->pageConfig = $context->getPageConfig(); 
    parent::__construct($context, $data); 
} 

Любая обратная связь с благодарностью получил

ответ

0

Вы должны попробовать это,

namespace Namespace\Module\Block; 

use Magento\Framework\App\Filesystem\DirectoryList; 

class Someblock extends \Magento\Framework\View\Element\Template 
{ 
    public $myfileobj; 
    public function __construct(
     \Magento\Framework\View\Element\Template\Context $context, 
     array $data = [] 
    ) 
    { 
     parent::__construct($context, $data); 
    } 

    public function dosomething() 
    { 
     $this->myfileobj = $this->getFilesystem(); 
    } 

} 

Вы можете использовать $ this-> myfileobj в другом месте.

+0

Это то, что я также пробовал - он вызывает ошибку; Шаблон фильтрации ошибок: Примечание: неопределенная переменная: файловая система – PixieMedia

+0

$ fileSystem используется только функция dosomething(), если вам нужно использовать ее в другой функции, тогда вам нужно использовать другую переменную. –

+0

извините, опечатка, это; Ошибка фильтра: Обратите внимание: неопределенное свойство: Пространство имен \ Module \ Block \ Someblock :: $ fileSystem Я вызываю его внутри функции непосредственно с помощью $ this-> fileSystem-> getDirectoryWrite (DirectoryList :: VAR_DIR) -> getAbsolutePath(). 'Instagram_timer'; – PixieMedia

0

Понял, ответ был прямо передо мной! Родительский конструктор был;

public function __construct(Template\Context $context, array $data = []) 
{ 
$this->validator = $context->getValidator(); 
$this->resolver = $context->getResolver(); 
$this->_filesystem = $context->getFilesystem(); 
$this->templateEnginePool = $context->getEnginePool(); 
$this->_storeManager = $context->getStoreManager(); 
$this->_appState = $context->getAppState(); 
$this->templateContext = $this; 
$this->pageConfig = $context->getPageConfig(); 
parent::__construct($context, $data); 
} 

Переменная;

$this->_filesystem 

НЕ

$this->_fileSystem 

который я имел.