2016-12-28 16 views
0

私は古いコードでプレーンなPHPと新しいコードをsymfonyに持っています。古いコードの呼び出しでクラスsymfonyのオートローダー、多分、インターセプトクラスは、どのように私は名前空間なしで、古いコードからapp/old/core/classes/Locale.phpを持っており、クラスexctly必要symfonyとプレーンなPHPオートロードクラス

を呼び出すためにsymfonyのを言ったとき、新しいコードから app/src/AppBundle/Entity/Locale.php、これは名前空間を持つエンティティがあります

と古いコードで、私はこの静的な機能を持っていけないと私はエラー

class Page 
{ 
    function replacePageTags($replace_arr) 
    { 
     // set brases for keys 
     $braced_arr = Array(); 

     foreach($replace_arr as $key => $value) { 
      $braced_arr["{".$key."}"] = $value; 
     } 

     //this I have error 
     $this->content = Locale::replaceTags($this->content, $braced_arr); 
    } 
} 

エラーメッセージを持っている古いコードから静的関数のロケールを呼び出しますが、symfonyの呼び出しエンティティ、当然の実体ロケール:

Attempted to call an undefined method named "replaceTags" of class "Locale".

私が追加WHEクラスのページへのロケールが含ま

include('Locale.php'); 

class Page 
{ 

がエラー

Error: Cannot declare class Locale, because the name is already in use

を持っている。しかし、私は実体static function replaceTags($text, $replace_arr)に追加したときに、まだ多分symfonyは別のロケールを呼び出し、エラーが発生しているが、私は電話を必要とします古い機能からのロケール、どうしたらいいですか?多分

この自動ロードで作曲に私はSRCに

"autoload": { 
    "psr-4": { 
     "": "src/" 
    } 

が、古いコードを持っていないか、私は他の開発者で

を知らないので、この問題を持っていない、私は、PHPのバージョン7.0.14を持っています彼らは7.0.8を持っているかもしれませんが、おそらく私はいくつかのph destrictionを必要とするでしょう、私は知らない( 古いコードでexectlyクラスを呼び出すか、この問題を解決するにはどうすればいいですか?

+0

実際のエラーメッセージを質問に追加してください。 [intl](http://php.net/manual/en/book.intl.php)拡張機能を有効にしていますか? –

+0

エラーメッセージ 'symfonyが名前Localeで別のcalssを呼び出すため、クラス" Locale ".'の" replaceTags "という未定義のメソッドを呼び出そうとしました。 –

+0

拡張機能はどうですか?あなたは 'php -m | grep intl'は何も返しません? –

答えて

2

あなたPageクラスは、intl拡張子から\Localeを使用しています。

クラス名の衝突により、レガシー(名前なし)コードとの互換性がないため、拡張機能を無効にすることができます。

+0

拡張機能を無効にする方法は? –

+0

それはインストール方法によって異なります。 'pecl uninstall intl'、' apt-get remove php5-intl'など。 –

+1

PHPのconfigsで 'intl.ini'のようなものが見つかったら、'/ etc/php5/mods-available'を実行すると、あなたはそれをコメントすることができます'; extension = intl.ini' –

0

古いライブラリに名前空間がない場合、 MapClassLoaderを使用してapping。

require_once '/path/to/src/Symfony/Component/ClassLoader/MapClassLoader.php'; 

$mapping = array(
    'Foo' => '/path/to/Foo', 
    'Bar' => '/path/to/Bar', 
); 

$loader = new MapClassLoader($mapping); 

$loader->register(); 

あなたはthe class map generatorを使用して、古いコードに自動的にそれを行うことができます。 この方法ですべてのあなたの古いクラス

ため Legacy\Classのようなカスタム名前空間を持つことができ
+0

問題だったら、代わりに作者を使ってクラスをマッピングすることをお勧めします。 –

関連する問題