スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方

    0
      Symfony Advent Calendar JP 2012 14日目です。

      composerでプロジェクトを始めるとapp/autoload.phpにある$loaderは¥Composer¥Autoload¥ClassLoaderになってしまい、registerNamespaces()メソッドが無いので、通常サードパーティのバンドルを入れた際に使うapp/autoload.phpへネームスペースを追加する書き方ではオートロードが動きません。

      具体的には、
      vendor/My/CoolBundle
      というバンドルを追加したいとします。
      たとえば、git submoduleを使う場合、
      git submodule add ~~~~/MyCoolBundle.git vendor/My/CoolBundle
      でサブモジュールとして追加します。
      或いは、アーカイブをダウンロードしてきた場合はアーカイブをvendor/My/CoolBundleに展開します。

      ここで、通常なら
      1.app/autoload.phpに
      $loader->registerNamespaces(array('My¥¥CoolBundle' => __DIR__.'/vendor/'));
      を追加
      2.app/AppKernel.phpで$bundlesに
      new My¥CoolBundle¥MyCoolBundle()
      を追加
      と進むわけですが、composer利用のプロジェクトだと$loader->registerNamespaces()が*必ず*こけます。

      これはapp/autoload.phpにある$loaderがSymfony¥Component¥ClassLoader¥UniversalClassLoaderのインスタンスではなく、Composer¥Autoload¥ClassLoaderのインスタンスであるためです。

      この時点で
      vendor/composer/ClassLoader.php

      vendor/composer/autoload_real.php
      をよく見ると
      $loader->add($prefix, $path)
      という形式で$loaderにネームスペースを追加できることがわかります。

      そこで、真似をしてapp/autoload.phpには
      $loader = require __DIR__.'/../vendor/autoload.php';
      の次の行辺りに
      $loader->add('My¥¥CoolBundle', __DIR__.'/../vendor/');
      を足してやります。
      こうすると、composerのオートローダーが手動で追加したバンドルも見つけてオートロードできるようになり、無事に使えるようになりました。


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 07:43
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        古いポストに突っ込みスマソ

        もし、追加するモジュールがPSR-0準拠なら、プロジェクトのcomposer.jsonに、

        "autoload": {
        "psr-0": {
        "Hoge":"src/",
        }
        }

        を追記で、いけたりしないかねぇ?(Silexはいけた)

        参考:
        http://thirdrow.hatenablog.jp/entry/2012/05/25/095350
        • ktz
        • 2013/01/21 4:45 PM
        追記。追記。
        php composer.phar update しないと、名前空間マップの仲間に入れてもらえないので注意。
        • ktz
        • 2013/01/21 4:51 PM
        >>ktzさん
        ありがとうございます!次があったら試してみますー!
        • 77web
        • 2013/01/23 12:07 PM
        コメントする








           

        PR

        calendar

        S M T W T F S
           1234
        567891011
        12131415161718
        19202122232425
        262728293031 
        << March 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM