Không thể khai báo giao diện, vì tên này đã được sử dụng


12

Sau khi tạo một giao diện đơn giản trong mô-đun mới của tôi. Tôi đã gõ vào thiết lập bin / magento: di: compile và tôi gặp lỗi khi nói rằng tên này đã được sử dụng.

Đây là mã của tôi:

namespace Company\Test\Api;

/*
 *  @api
 */
interface XyzInterface {
    public function getSomething();
}

Sau đó, tôi nhận được lỗi này:

Repositories code generation... 1/7 [====>-----------------------]  14% 2 secs 52.0 MiBPHP 
Fatal error:  Cannot declare interface Company\Test\Api\XyzInterface, because the name is already in use in .../app/code/Company/Test/Api/XyzInterface.php on line 13

Dòng này là "giao diện XyzInterface" Tôi không chắc mình đang làm gì sai.


1
Bạn có thể vui lòng chạy lệnh với tùy chọn -vvv để xem theo dõi ngăn xếp không? Có thể là tập tin được bao gồm hai lần bởi một số lý do.
BuskaMuza

Nó chỉ hiển thị "Lỗi nghiêm trọng của PHP"
Nelly

Bạn cũng có thể thử kích hoạt xdebug. Tôi nghĩ rằng nó sẽ giúp hiển thị backtrace.
BuskaMuza

1
tôi cũng gặp lỗi này vì lớp "không gian tên" bị nhầm lẫn
Ansyori

Câu trả lời:


34

Hôm nay tôi nhận được lỗi cùng loại:

Lỗi nghiêm trọng của PHP: Không thể khai báo lớp Class \ Name \ Here, vì tên này đã được sử dụng trong /var/www/m2/magento2/app/code/path/to/the/ class.php trên dòng 100

trong đó dòng 100 là kết thúc của tập tin.

Khoảng sau 4 giờ gỡ lỗi tôi thực sự tìm thấy lý do: một lỗi trong khai báo không gian tên. Cho đến giây phút cuối cùng tôi đã không tin rằng đó là một lỗi đánh máy trong khai báo tên, nhưng khi tôi đã viết lại tất cả các tên một lần nữa - lỗi đã biến mất. Bài viết này rất hữu ích:

Tôi sẽ gãi đầu một lúc, tự hỏi chuyện gì đang xảy ra, và cuối cùng nhận ra đây là

Pulsetorm

tức là tôi đã nhập sai tên không gian tên và khi tự động tải ban đầu tải tệp lớp, nó sẽ không xác định lớp mà nó đang tìm, và sau đó một trình tải tự động thứ hai (thường là Trình soạn thảo) tải lại và cố gắng xác định lại cùng một lớp không đúng.

tức là Magento muốn cả lớp

Pulsestorm\Helloworld\Observers\Block

nhưng tôi đã xác định

Pulsetorm\Helloworld\Observers\Block

nhờ không gian tên sai.

Cảm ơn, Alan Storm :)

CẬP NHẬT:

Một loại lỗi khác là khai báo không gian tên không chính xác với phần thiếu của không gian tên, như trong ví dụ này:

Lỗi:

Tạo mã kho lưu trữ ... 1/7 [====> -----------------------] 14% 1 giây 50.0 MiBPHP Lỗi nghiêm trọng: Không thể khai báo lớp Migration \ Step \ Version11410to2000Test, vì tên này đã được sử dụng trong /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRrite dòng 109

trong đó dòng 109 là cuối của tập tin.

Trong tệp vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpchúng tôi đã tìm thấy không gian tên như Migration\Stepkhi không gian tên chính xác phải là Migration\Step\UrlRewritevì đường dẫn đến lớp này là Migration/Step/UrlRewrite. Sau khi thay đổi không gian tên thành Migration/Step/UrlRewritelỗi.


1
Tôi đã có một vấn đề tương tự, đây là vấn đề điên rồ
Hamza Alayed
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.