2016-03-24 6 views
1

2つのモジュールが同じクラス名をprestashopで使用すると「クラスを再宣言できません」という致命的なエラーを避けるには?Prestashop 2つのモジュールが同じ名前を使用し、「Can not redeclare class」という致命的なエラーを返します

たとえば、ヘルパークラスFooを宣言して使用するモジュールがあります。 別のヘルパークラスを持つ新しいモジュールをインストールしますが、同じ名前のFooを使用します。だから私はモジュールページに行くときに "クラスを再宣言できません"という致命的なエラーが発生します。私はその新しいモジュールをアンインストールすることさえできません。

+0

1つのクラスの名前を変更するか、1つのモジュールをアンインストールします。 PHPには "NameSpace"という概念がないため、名前の重複を避ける他の方法はありません。 – KarmaEDV

+0

@KarmaEDV名前空間の概念はありませんか?あなたは過去7年間あなたの洞窟から出ましたか?名前空間は2009年にPHP 5.3で導入されました。 –

+0

@FlorianLemaitre実際、phpが関連しなくなった時代でした(とにかく)。冷たい、感謝はそれを知らなかったし、残念です。あなたが気にしないならば、PHPを無視することに戻ります:-) – KarmaEDV

答えて

0

この2つのモジュールの1つを編集し、そのクラスの宣言と、ファイル。

Prestashop(1.7)の次のバージョンでは、Symfony 2 Frameworkを使用して名前空間の概念が導入されます。

+0

ありがとうございます。私は名前空間が現在のバージョン1.6で動作しないことを知らなかったし、私の時間を無駄に試してみました。 – Developer

2

カスタムクラス/オブジェクトモデルを使用するモジュールを作成する場合は、名前空間が必要です。 PrestaShopでは、PHPのnamespace機能を使用することはできません(PrestaShopコアはこれに対応していないため)、クラス名の前にプレースホルダを付けるとできます。たとえば:

// Your module: 
class MyModule extends Module 

// Your custom ObjectModel: 
class Message extends ObjectModel 

クラス名Messageは、一般的な非常にで、ほとんどが悪い、それはクラス名に選ばれたいくつかの他のモジュールとの競合に来て好きになるでしょう。これを防止するために

、あなたのクラス名の前に付ける必要があります。この場合MM_

class MM_Message extends ObjectModel 

MyModuleの略です。これは、他のモジュールやクラスと競合する可能性が非常に低くなります。また、

class MyModule_Message extends ObjectModule 

応じて、データベースのテーブル名:イベントは、より良い方法は、モジュール全体の名前の前に付けることであろうps_my_module_messageを。これにより、データベーステーブルを簡単にナビゲートすることもできます。プレフィックスクラス名は非常に良い練習です、実際には、私はいつもそれを行います。欠点は、より長いクラス名かもしれません。

P.S競合するモジュールをアンインストールする場合は、一時的にオンにする必要があります。モジュールフォルダを一時的に別のもの(残したいモジュールのフォルダ)に名前を変更し、他のモジュールをアンインストールすることをお勧めします。その後、元のフォルダ名を復元します。モジュールフォルダの名前を変更すると、ロードできなくなります。 技術的には、BOにロードされていない場合、バックオフィスで無効にしようとする可能性があります

+0

ありがとう。あなたが提案したことはすべてOKです。それが私がやっていることです。しかし、誰かが自分のクラスの名前と全く同じ名前を選んだり、フォルダ名などを変更するためにサーバにアクセスできないユーザがいるかもしれません...あなたが知っているのは... だから私はこの質問に私が行方不明になっていて、この問題を100%回避することができる、よりよい方法があります。 – Developer

+0

基本的にいくつかのテクニックを提案しましたが、これは答えではありません。だから答えはいいです、100%保証でそれを避ける方法はありませんか? – Developer

+1

他の開発者が**失敗したことを避けることはできません**。あなた自身でモジュールを開発している場合、そこに推奨事項を従わなければならず、問題はありません – gskema

関連する問題