2016-08-19 5 views
0

私は簡単なWordpressのプラグインのためのファイルを維持するために作曲家を使用しようとしています。 - クラスを必要とし、Wordpressの 不正確なバージョンを含む作者の自動ロード

  • WP_Custom_Menu_Widget.phpとウィジェットを登録したファイル - メインウィジェットクラス
  • WP_Widget_Base.php - WP_Custom_Menu_Widget.php
  • Iによって拡張

    • dmg_custom_menu_widget.php:プラグインコードは、3つのファイルを使用していますコンポーザーを使用してプラグインコードをインストールし、依存関係を取得します。私が手

      require_once 'vendor/autoload.php'; 
      

      :ファイルは、このような作曲の自動ロードファイル使用dmg_custom_menu_widget.phpで含まれている場合は

      「致命的なエラー:未定義のメソッドの呼び出し...」それが使用さWP_Widget_Base.phpの古いバージョンを含めているので、 dmg-custom-menu-widgetのベースディレクトリの外に別のウィジェットプラグインによって作成されます。

      ファイルが使用dmg_custom_menu_widget.phpによって直接含まれている場合:正しいファイルが含まれているので、私はエラーを取得していない

      require_once 'vendor/DMG/WP_Widget_Base/src/WP_Widget_Base.php'; 
      require_once 'src/WP_Custom_Menu_Widget.php'; 
      

      を。

      plugins/ 
          dmg-related-pages-widget/ 
          vendor/ 
           DMG/ 
           WP_Widget_Base/ 
            src/ 
            WP_Widget_Base.php  <- File being included 
          dmg-custom-menu-widget/ 
          dmg_custom_menu_widget.php  <- Calls require_once 'vendor/autoload.php' 
          vendor/ 
           autoload.php     <- Composer autoload file 
           DMG/ 
           WP_Widget_Base/ 
            src/ 
            WP_Widget_Base.php  <- File that should be included 
      

      追加情報

      フォルダdmg-related-pages-widgetが削除されている場合は、正しいファイルが含まれています:

      これは、関連するフォルダ構造です。

      Composer.json

      { 
          "name"  : "DMG/WP_Custom_Menu_Widget", 
      
          "license" : "GPL-3.0", 
      
          "repositories": 
          [ 
           { 
            "type": "git", 
            "url": "https://[email protected]/dgifford/wp_widget_base.git" 
           } 
          ], 
      
          "require": 
          { 
           "DMG/WP_Widget_Base" : "dev-master" 
          }, 
      
      
          "autoload": 
          { 
           "classmap": 
           [ 
            "src/WP_Custom_Menu_Widget.php" 
           ] 
          } 
      } 
      
    +0

    あなたに 'composer.json'を追加できますか?私はこのプラグインのオートロードを自分で追加したと思いますよね? – vfsoraki

    +0

    私はcomposer.jsonファイルを追加しました。コンポーザーによるオートローディング。 – theHands

    答えて

    1

    正しいvendor/autoload.phpが含まれていることを確認します。

    たぶん、あなたの問題は、あなたの作業ディレクトリがdmg-related-pages-widgetで、dmg_custom_menu_widget.phpvendor/autoload.phpを含む場合、それはdmg-related-pages-widget内のファイルではないdmg_custom_menu_widgetに1をロードするということです。これは、dmg_custom_menu_widget.phpを含む別のスクリプトがある場合に発生します。 PHPでは、作業ディレクトリはPHPインタープリタがデフォルトで発行された場所、またはWebサーバーの場合は "document_root"です。

    これが問題であるかどうかを確認するには、をdmg_custom_menu_widget.phpに含める前にchdir(__DIR__);を追加してください。それがうまくいくなら、あなたはその問題を知っています。また、作業ディレクトリを一時的に変更するのに役立つgetcwd()機能もあります。

    vendor/autoload.phpが含まれていますが、dmg_custom_menu_widget.phpには、右にvendor/autoload.phpが含まれる前に間違っている可能性があります。これは、間違ったオートローダーが正しいものの前に登録し、クラスを最初にロードしようとしていることを意味します。そのため、間違ったクラスが最初に読み込まれます。

    +0

    絶対パスを使用して正しいautoload.phpファイルが使用されていることを確認しました。しかし、あなたの答えは私にこれをもたらしましたhttp://stackoverflow.com/questions/35598258/composer-autoload-always-comes-firstそして2つの作曲家オートローダーが開始され、最後に 'dmg-related- pages-widget'は依存関係の古いバージョンをロードしていました。あなたの答えを正しいものにする必要があるかどうかわかりません - 正しい答えに導かれていませんか? – theHands

    +0

    これは '$ prepend'です!とにかく、それを正しいものとしてマークするのはあなたの選択です。それを編集して、Composerのオートローダーの動作が含まれるようにすることもできます。しかし、upvoteは素晴らしいだろう。 – vfsoraki

    関連する問題