Magento2 - Bộ điều khiển tùy chỉnh ném lỗi


12

Tôi đã tạo ra một mô-đun hiển thị trong bài viết này . Nhưng bộ điều khiển của riêng tôi không hoạt động. Tôi đã nhận được thông báo lỗi này:

Lỗi có thể phục hồi: Đối số 1 được truyền cho MP \ MyModule \ Controller \ Index \ CheckUserName :: __ construc () phải là một phiên bản của Magento \ Framework \ App \ Action \ Context, ví dụ của Magento \ Framework \ ObjectManager \ ObjectManager, được gọi trong D : \ xampp \ htdocs \ magento2 \ eller \ magento \ framework \ ObjectManager \ Factory \ AbstractFactory.php trên dòng 97 và được định nghĩa trong D: \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName. php trên dòng 35

Đây là mã điều khiển của tôi:

<?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";
    }    
}
 ?>

Đây là thông báo lỗi sau khi xóa thư mục var / Generation:

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 nhận xét chức năng __construct của bạn và sau đó kiểm tra lại. và cũng xóa thư mục thế hệ khỏi thư mục magento var của bạn
Shaheer Ali

Rất tiếc, Shaheer không khắc phục được sự cố.
ClassMP

bạn đã xóa thư mục thế hệ?
Shaheer Ali

Không. Ý bạn là thư mục / var / Generation? Làm thế nào để nội dung trong thư mục thế hệ sẽ được tạo ra? Tôi có cần biên dịch lại với "magento setup: di: compile" không?
ClassMP

vâng tôi có ý đó M2 trước tạo các tập tin nhà máy trong thời gian chạy. Không, bạn không cần phải biên dịch lại
Shaheer Ali 14/1/2016

Câu trả lời:


18

Sau khi triển khai mô-đun trên môi trường phát triển CentOS mới, hãy xóa các thư mục var / di và var / Generation và biên dịch lại di, nó hoạt động. Trước đó tôi đã sử dụng môi trường Win Xampp. Điều đó gây ra rất nhiều rắc rối ...


2
Có thể xác nhận điều này hoạt động, đó là một nỗi đau mà bạn phải làm điều đó bất cứ khi nào thêm một tuyến đường mới
Alex

1
Đây thực sự là một vấn đề duy nhất của CentOS?
Mir

2
@Mir đây không phải là một vấn đề hệ điều hành. @Alex bất cứ khi nào bạn thực hiện một số thay đổi về tiêm phụ thuộc, bạn chỉ cần chạy php bin/magento setup:di:compilelệnh này sẽ làm mọi thứ.
Nahid

7

Tôi gặp vấn đề tương tự. Sau vài giờ gỡ lỗi vô nghĩa và đập đầu vào tường tôi đã tìm ra một giải pháp hiệu quả cho tôi.

Cuối cùng, tôi đã đổi tên tất cả các tên tệp hành động và tên lớp từ trường hợp lạc đà tức là

Từ:

D: \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ CheckUserName.php

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

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

Đến:

D: \ xampp \ htdocs \ magento2 \ app \ code \ mp \ MyModule \ Controller \ Index \ Checkusername.php

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

Nó có liên quan gì đến phiên bản mới nhất của Magento2 không? Tôi có nó chạy trên môi trường cục bộ của tôi mà không có vấn đề gì, tuy nhiên khi tôi chạy trình biên dịch là khi gặp vấn đề đó.
awavi

Nó có một cái gì đó để làm với môi trường máy chủ. Theo kinh nghiệm của tôi, khi tôi phát triển mô-đun trên Windows (hoặc Mac gần đây) tôi không gặp vấn đề với tên tệp và tên lớp vỏ lạc đà, nhưng trong hầu hết các bản phân phối linux tôi gặp phải các vấn đề này, vì vậy tôi thấy dễ dàng hơn chỉ cần đặt tên cho các tập tin và các lớp như tôi đã đề cập trước đó.
Zan Kolev

Tôi khá chắc chắn rằng vấn đề là Windows được gõ yếu, có nghĩa là 'CheckUserName.php' được xử lý giống như 'Checkusername.php' trong Windows. Tuy nhiên, Linux được gõ mạnh có nghĩa là 'CheckUserName.php' và 'Checkusername.php' là hai thứ hoàn toàn khác nhau. Thỉnh thoảng tôi cũng gặp phải những vấn đề tương tự vì tôi phát triển trên Windows và thử nghiệm trên CentOS.
Mike Levy

7

Từ thư mục gốc Magento của bạn chạy lệnh sau:

php bin/magento setup:di:compile

Điều này sẽ biên dịch lại Dependency Injection (DI) và vấn đề của bạn sẽ biến mất.


Tôi đã chạy lệnh đó thành công, nó nói và nó đã gỡ bỏ toàn bộ giỏ hàng cả quản trị viên và lỗi trước, "không thể mở luồng: Quyền bị từ chối trong / var / www / html / mangento2 / eller / colinmollenhour / cache-backend -file / File.php. Nó có cùng một lỗi trong quản trị viên và frontend.
VectorVortec

Sau đó, tôi chạy lệnh, một lần nữa, và cả hai phần của giỏ hàng trở lại hoạt động bình thường.
VectorVortec

0

Tệp điều khiển của bạn CheckUserName.phptrông như dưới đây

MP / MyModule / Trình điều khiển / Chỉ mục / 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";
    }

}

xóa bộ nhớ cache.

sau đó bạn có thể truy cập bộ điều khiển của mình bằng cách sử dụng URL bên dưới

http://192.168.0.52/m2ee/my_module/index/CheckUserName/ hoặc http://192.168.0.52/m2ee/index.php/my_module/index/CheckUserName/

Lưu ý: my_module là tên trước của mô-đun của tôi, bạn có thể thay thế tên trước của mình ở đây.

xem bên dưới pic Phía tôi đang hoạt động

nhập mô tả hình ảnh ở đây

cho tôi biết nếu nó không hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.