Magento2 - Özel Denetleyici hata veriyor


12

Bu yazıda gösterilen bir modül oluşturdum . Ama kendi denetleyicim çalışmıyor. Bu hata mesajını aldım:

Kurtarılabilir Hata: MP \ MyModule \ Controller \ Index \ CheckUserName :: __ construct () öğesine iletilen Argüman 1, Magento \ Framework \ App \ Action \ Context örneği, verilen Magento \ Framework \ ObjectManager \ ObjectManager örneği D olarak adlandırılmalıdır : \ xampp \ htdocs \ magento2 \ vendor \ magento \ framework \ ObjectManager \ Factory \ AbstractFactory.php 97 satırında ve D: \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName içinde tanımlanmıştır. php on line 35

İşte benim denetleyici kodu:

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{
    protected $_logger;
    protected $_objectManager;
    protected $_request;

/*
            \Psr\Log\LoggerInterface $logger, //log injection
            \Magento\Framework\App\Request\Http $request

        $this->_logger = $logger;

        $this->_logger->debug('CheckUserName_Constructor_Begin');

        $this->_request = $request;

        $this->_logger->debug('CheckUserName_Constructor_End');     


        */  

        /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Checkusername";
    }    
}
 ?>

Var / generation klasörünü sildikten sonraki hata mesajları şunlardır:

Warning: ltrim() expects parameter 1 to be string, object given in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\EntityAbstract.php on line 152

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\magento\framework\Autoload\ClassLoaderWrapper.php on line 81

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 317

Notice: Uninitialized string offset: 0 in D:\xampp\htdocs\magento2\vendor\composer\ClassLoader.php on line 349 exception 'Magento\Framework\Exception\LocalizedException' with message 'Source class "" for "Magento\Framework\App\Response\Http\Interceptor" generation does not exist.' in D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php:171 Stack trace: #0 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator.php(100): Magento\Framework\Code\Generator->tryToLoadSourceClass('Magento\\Framewo...', Object(Magento\Framework\Interception\Code\Generator\Interceptor))
#1 D:\xampp\htdocs\magento2\vendor\magento\framework\Code\Generator\Autoloader.php(35): Magento\Framework\Code\Generator->generateClass('Magento\\Framewo...')
#2 [internal function]: Magento\Framework\Code\Generator\Autoloader->load('Magento\\Framewo...')
#3 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\AbstractFactory.php(105): spl_autoload_call('Magento\\Framewo...')
#4 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(88): Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\\Framewo...', Array)
#5 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(130): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...')
#6 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\Factory\Compiled.php(67): Magento\Framework\ObjectManager\Factory\Compiled->get('Magento\\Framewo...')
#7 D:\xampp\htdocs\magento2\vendor\magento\framework\ObjectManager\ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Compiled->create('Magento\\Framewo...', Array)
#8 D:\xampp\htdocs\magento2\vendor\magento\framework\App\Bootstrap.php(233): Magento\Framework\ObjectManager\ObjectManager->create('Magento\\Framewo...', Array)
#9 D:\xampp\htdocs\magento2\index.php(38): Magento\Framework\App\Bootstrap->createApplication('Magento\\Framewo...')
#10 {main}

1
@Claas MP __construct işlevinizi yorumlayıp tekrar kontrol edin. ve ayrıca oluşturma klasörünü magento var dir'nizden silin
Shaheer Ali

Merhaba Shaheer maalesef bu sorunu çözmüyor.
ClassMP

nesil klasörü sildin mi?
Shaheer Ali

Hayır. / Var / generation klasörünü mü kastediyorsunuz? Nesil klasöründeki içerik nasıl üretilecek? "Magento setup: di: compile" ile yeniden derlemem gerekir mi?
ClassMP

evet demek istediğim. M2, çalışma zamanında fabrika dosyalarını oluşturur. Yeniden derlemenize gerek yok
Shaheer Ali

Yanıtlar:


18

Modülü yeni bir CentOS geliştirme ortamına yerleştirdikten sonra, var / di ve var / generation klasörlerini kaldırın ve di'yi yeniden derleyin, çalışır. Ondan önce bir Win Xampp ortamı kullandım. Bu çok belaya neden oluyor ...


2
Bunun işe yaradığını doğrulayabilir, yeni bir rota eklerken bunu yapmak zorunda olduğunuz bir acıdır
Alex

1
Bu gerçekten sadece bir CentOS meselesi mi?
Mir

2
@Mir bu bir işletim sistemi sorunu değil. @Alex bağımlılık enjeksiyonunda bazı değişiklikler yaptığınızda, php bin/magento setup:di:compileher şeyi yapacak bu komutu çalıştırmanız yeterlidir .
Nahid

7

Ben de aynı sorunla karşılaştım. Birkaç saat anlamsız hata ayıklama ve kafamı duvardan vurduktan sonra benim için iyi çalışan bir çözüm buldum.

Sonunda deve-case yani tüm eylem dosya adları ve sınıf isimleri yeniden adlandırdı

Gönderen:

D: \ xampp \ htdocs \ magento2 \ app \ kod \ mp \ MyModule \ Kontrolör \ Endeksi \ CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action {
...
}

Kime:

D: \ xampp \ htdocs \ magento2 \ app \ kod \ mp \ MyModule \ Kontrolör \ Endeksi \ Checkusername.php

class Checkusername extends \Magento\Framework\App\Action\Action {
...
}

Magento2'nin en son sürümüyle ilgisi var mı? Hiçbir sorun ile yerel ortamımda çalışan var, ancak ben de derleyici çalıştırmak zaman bu sorun söz konusu olduğunda.
awavi

Sunucu ortamıyla bir ilgisi var. Benim deneyimlerime göre, Windows (veya son zamanlarda Mac) üzerinde modül geliştirdiğimde, deve davası dosya adları ve sınıf adları ile ilgili bir sorunum yok, ancak çoğu linux dağıtımının altında bu sorunlarla karşılaşıyorum, bu yüzden daha kolay buluyorum sadece dosyaları ve sınıfları daha önce de belirttiğim gibi adlandırın.
Zan Kolev

Sorunun Windows zayıf yazıldığından eminim, yani 'CheckUserName.php' Windows'ta 'Checkusername.php' ile aynı şekilde ele alınır. Ancak Linux güçlü bir şekilde yazılmıştır 'CheckUserName.php' ve 'Checkusername.php' tamamen farklı iki şeydir. Zaman zaman aynı sorunlarla karşılaşıyorum çünkü Windows üzerinde geliştirmelerimi ve CentOS'ta testlerimi yapıyorum.
Mike Levy

7

Magento kök dizininizden aşağıdaki komutu çalıştırın:

php bin/magento setup:di:compile

Bu, Bağımlılık Enjeksiyonunu (DI) tekrar derleyecek ve sorununuz ortadan kalkacaktır.


Bu komutu başarılı bir şekilde çalıştırdım, dedi ve tüm alışveriş sepetini hem yönetici hem de ön ucu aşağı çekti, "akış açılamadı: / var / www / html / mangento2 / vendor / colinmollenhour / cache-backend'de izin verilmedi Yönetici ve ön
uçta

Sonra, komutu tekrar çalıştırdım ve alışveriş sepetinin her iki kısmı da normal davranışlarına döndü.
VectorVortec

0

Denetleyici CheckUserName.phpdosyanız aşağıdaki gibi görünür

MP / MyModule / Kontrolör / Index / CheckUserName.php

<?php
namespace MP\MyModule\Controller\Index;

class CheckUserName extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    )
    {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute()
    {
        echo "Hello from Check username";
    }

}

önbelleği temizle.

bundan sonra aşağıdaki URL'yi kullanarak kontrol cihazınıza erişebilirsiniz

http://192.168.0.52/m2ee/my_module/index/CheckUserName/ veya http://192.168.0.52/m2ee/index.php/my_module/index/CheckUserName/

Not: my_module, modülün ön adıdır, ön adınızı buradan değiştirebilirsiniz.

aşağıya bakın pic Benim tarafım çalışıyor

resim açıklamasını buraya girin

çalışmıyorsa bana bildirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.