7

Symfony 1.2 プロジェクトを Symfony 2.x に移植しています。現在、最新の 2.1.0-dev リリースを実行しています。

私の古いプロジェクトから、配列を文字列に変更したり、文字列からスラッグを生成したりするためのいくつかの単純な機能を持つ Tools というクラスがあります。新しいプロジェクトでこのクラスを使用したいのですが、バンドル外でこのクラスを使用する方法がわかりません。

ここでapp/autoload.phpの変更を推奨するさまざまな回答を見てきましたが、私のautoload.phpは回答のものとは異なって見えます.2.0と2.1の間で何かが変更された可能性があります.

ソース管理下にあるため、クラスを src または app ディレクトリに保持したいと思います。私の vendors ディレクトリは、composer を使用して処理しているため、そうではありません。

ここでアドバイスをいただければ幸いです。

4

2 に答える 2

12

もう 1 つの方法は、/app/config/autoload.php を使用することです。

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';
$loader->add( 'YOURNAMESPACE', __DIR__.'/../vendor/YOURVENDOR/src' );


// intl
if (!function_exists('intl_get_error_code')) {
    require_once  _DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

YOURNAMESPACE と YOURVENDOR を自分の値に置き換えるだけです。これまでのところ、私にとっては非常にうまく機能しています。

おっしゃるとおり、autoload が 2.0 から 2.1 に変更されたことに気づきました。上記のコードは、プロジェクトをアップグレードした最新バージョンで正常に動作します;-)

于 2012-10-05T12:36:50.927 に答える
7

このような単純なケースの場合、最も迅速な解決策は、フォルダー (たとえば、Common) を直接下に作成し、その中srcにクラスを配置することです。

src
  -- Common
    -- Tools.php

Tools.phpたとえば、適切な名前空間を持つクラスが含まれています

<?php

namespace Common;

class Tools
{
    public static function slugify($string)
    {
        // ...
    }
}

use関数を呼び出す前に、ステートメントを忘れないでください

use Common\Tools;

// ...
Tools::slugify('my test string');

src上記のように適切なフォルダー構造と名前空間に従ってコードを配置すると、 に触れなくても動作しapp/autoload.phpます。

于 2012-08-21T09:33:40.603 に答える