J'ai essayé d'ajouter un bloc au pied de page mais jusqu'à présent, il continue de revenir Invalid block type: [Namespace]\[Module]\Block\Timeline
La source de ce que j'ai jusqu'à présent peut également être trouvée ici: https://github.com/sandermangel/magento2-twitterfeed
mon layout/default.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="footer">
<block class="[Namespace]\[Module]\Block\Timeline" name="twitterfeed-timeline" template="footer/timeline.phtml"></block>
</referenceBlock>
</body>
</page>
et ma classe de bloc vendor/[namespace]/[module]/Block/Timeline.php
namespace [Namespace]\[Module]\Block;
use Magento\Framework\View\Element\Template;
class Timeline extends Template
{
/**
* Timeline constructor.
* @param Template\Context $context
* @param array $data
*/
public function __construct(
Template\Context $context,
array $data = []
) {
parent::__construct($context, $data);
}
/**
* @return mixed
*/
public function getTweets()
{
// ---
}
}
composer.json
{
"name": "[namespace]/[module]",
"description": "Lipsum",
"version": "0.1.0",
"license": "OSL-3.0",
"require": {
"abraham/twitteroauth": "*"
},
"type": "magento2-module",
"repositories": [
{
"type": "git",
"url": "https://github.com/url.git"
},
{
"type": "git",
"url": "https://github.com/abraham/twitteroauth.git"
}
],
"autoload": {
"files": [
"registration.php"
],
"psr-4": {
"[Namespace]\\[Module]\\": ""
}
}
}
Et l' exception.log
erreur
[2015-11-29 16:56:55] main.CRITICAL: exception 'Magento\Framework\Exception\LocalizedException' with message 'Invalid block type: [Namespace]\[Module]\Block\Timeline' in vendor/magento/framework/View/Layout/Generator/Block.php:262
Stack trace:
#0 vendor/magento/framework/View/Layout/Generator/Block.php(237): Magento\Framework\View\Layout\Generator\Block->getBlockInstance('[Namespace]\\[Module]...', Array)
#1 vendor/magento/framework/View/Layout/Generator/Block.php(216): Magento\Framework\View\Layout\Generator\Block->createBlock('[Namespace]\\[Module]...', 'twitterfeed-tim...', Array)
#2 vendor/magento/framework/View/Layout/Generator/Block.php(124): Magento\Framework\View\Layout\Generator\Block->generateBlock(Object(Magento\Framework\View\Layout\ScheduledStructure), Object(Magento\Framework\View\Layout\Data\Structure), 'twitterfeed-tim...')
#3 vendor/magento/framework/View/Layout/GeneratorPool.php(86): Magento\Framework\View\Layout\Generator\Block->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#4 vendor/magento/framework/View/Layout.php(327): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Object(Magento\Framework\View\Layout\Generator\Context))
#5 var/generation/Magento/Framework/View/Layout/Interceptor.php(89): Magento\Framework\View\Layout->generateElements()
#6 vendor/magento/framework/View/Layout/Builder.php(129): Magento\Framework\View\Layout\Interceptor->generateElements()
#7 vendor/magento/framework/View/Page/Builder.php(55): Magento\Framework\View\Layout\Builder->generateLayoutBlocks()
#8 vendor/magento/framework/View/Layout/Builder.php(65): Magento\Framework\View\Page\Builder->generateLayoutBlocks()
#9 vendor/magento/framework/View/Page/Config.php(166): Magento\Framework\View\Layout\Builder->build()
#10 vendor/magento/framework/View/Page/Config.php(475): Magento\Framework\View\Page\Config->build()
#11 vendor/magento/framework/View/Page/Config.php(433): Magento\Framework\View\Page\Config->getElementAttribute('body', 'class')
#12 vendor/magento/module-catalog/Helper/Product/View.php(159): Magento\Framework\View\Page\Config->addBodyClass('catalog-product...')
#13 vendor/magento/module-catalog/Helper/Product/View.php(214): Magento\Catalog\Helper\Product\View->initProductLayout(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Magento\Catalog\Model\Product\Interceptor), Object(Magento\Framework\DataObject))
#14 vendor/magento/module-catalog/Controller/Product/View.php(109): Magento\Catalog\Helper\Product\View->prepareAndRender(Object(Magento\Framework\View\Result\Page\Interceptor), 1, Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Magento\Framework\DataObject))
#15 var/generation/Magento/Catalog/Controller/Product/View/Interceptor.php(24): Magento\Catalog\Controller\Product\View->execute()
#16 vendor/magento/framework/App/Action/Action.php(102): Magento\Catalog\Controller\Product\View\Interceptor->execute()
#17 [internal function]: Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#18 vendor/magento/framework/Interception/Interceptor.php(74): call_user_func_array(Array, Array)
#19 vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Catalog\Controller\Product\View\Interceptor->___callParent('dispatch', Array)
#20 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Product\View\Interceptor), Array, 'designLoader')
#21 vendor/magento/framework/App/Action/Plugin/Design.php(39): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#22 [internal function]: Magento\Framework\App\Action\Plugin\Design->aroundDispatch(Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#23 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#24 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Product\View\Interceptor), Array, 'customer-app-ac...')
#25 vendor/magento/module-customer/Model/App/Action/ContextPlugin.php(61): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#26 [internal function]: Magento\Customer\Model\App\Action\ContextPlugin->aroundDispatch(Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#27 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#28 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Product\View\Interceptor), Array, 'storeCheck')
#29 vendor/magento/module-store/App/Action/Plugin/StoreCheck.php(44): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#30 [internal function]: Magento\Store\App\Action\Plugin\StoreCheck->aroundDispatch(Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#31 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#32 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Product\View\Interceptor), Array, 'contextPlugin')
#33 vendor/magento/module-store/App/Action/Plugin/Context.php(98): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#34 [internal function]: Magento\Store\App\Action\Plugin\Context->aroundDispatch(Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#35 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#36 vendor/magento/framework/Interception/Interceptor.php(136): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Catalog...', 'dispatch', Object(Magento\Catalog\Controller\Product\View\Interceptor), Array, 'tax-app-action-...')
#37 vendor/magento/module-tax/Model/App/Action/ContextPlugin.php(91): Magento\Catalog\Controller\Product\View\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#38 [internal function]: Magento\Tax\Model\App\Action\ContextPlugin->aroundDispatch(Object(Magento\Catalog\Controller\Product\View\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#39 vendor/magento/framework/Interception/Interceptor.php(141): call_user_func_array(Array, Array)
#40 var/generation/Magento/Catalog/Controller/Product/View/Interceptor.php(39): Magento\Catalog\Controller\Product\View\Interceptor->___callPlugins('dispatch', Array, Array)
#41 vendor/magento/framework/App/FrontController.php(55): Magento\Catalog\Controller\Product\View\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#42 [internal function]: Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#43 vendor/magento/framework/Interception/Interceptor.php(74): call_user_func_array(Array, Array)
#44 vendor/magento/framework/Interception/Chain/Chain.php(70): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#45 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'requestPreproce...')
#46 vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php(89): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#47 [internal function]: Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#48 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#49 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'install')
#50 vendor/magento/framework/Module/Plugin/DbStatusValidator.php(69): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#51 [internal function]: Magento\Framework\Module\Plugin\DbStatusValidator->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#52 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#53 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'storeCookieVali...')
#54 vendor/magento/module-store/Model/Plugin/StoreCookie.php(78): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#55 [internal function]: Magento\Store\Model\Plugin\StoreCookie->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#56 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#57 vendor/magento/framework/Interception/Chain/Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#58 vendor/magento/module-page-cache/Model/App/FrontController/VarnishPlugin.php(55): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Request\Http))
#59 [internal function]: Magento\PageCache\Model\App\FrontController\VarnishPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#60 vendor/magento/framework/Interception/Chain/Chain.php(68): call_user_func_array(Array, Array)
#61 vendor/magento/framework/Interception/Interceptor.php(136): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'dispatch', Object(Magento\Framework\App\FrontController\Interceptor), Array, 'front-controlle...')
#62 vendor/magento/module-page-cache/Model/App/FrontController/BuiltinPlugin.php(68): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#63 [internal function]: Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#64 vendor/magento/framework/Interception/Interceptor.php(141): call_user_func_array(Array, Array)
#65 var/generation/Magento/Framework/App/FrontController/Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#66 vendor/magento/framework/App/Http.php(115): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#67 vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#68 index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#69 {main} [] []
Toute idée de ce qui pourrait être faux est appréciée
Magento\Framework\View\Layout\Generator\Block::getBlockInstance
mais je n'ai pas pu déterminer pourquoiRéponses:
J'ai défini un
use
dans la classe de bloc avant la définition de classe. Dans cette utilisation, j'ai oublié un interligne\
qui cas une erreur. Mais comme cette erreur est détectée et supprimée,Magento\Framework\View\Layout\Generator\Block::getBlockInstance
elle génère une erreur complètement indépendante.En bref: provoquer une erreur PHP au-dessus de la
class
définition entraînera toujours l'Invalid block type:
erreurla source
Pour moi, cela a été corrigé lorsque j'ai changé le nom du fichier en celui du nom de classe et de l'appel XML. Comme ça:
app / code / Rafaelcg / Smartlook / view / frontend / layout / default.xml
app / code / Rafaelcg / Smartlook / Block / Code.php
la source
Si vous utilisez Composer pour inclure votre module, voici une autre raison possible de cette erreur:
Vous pourriez avoir une mauvaise définition PSR-4 dans votre
composer.json
. Normalement, cela devrait ressembler à ceci:Cependant, si le nom de votre module ne l' est pas
Module
, votre chargement automatique est interrompu et aucune classe ne sera trouvée. Dans ce cas, vous devez corriger le nom du module et réexécutercomposer require namespace/module
pour mettre à jour la définition dans lecomposer.lock
et pour recréer vos fichiers de chargement automatique.la source