symfony2で機能拡張はどうすれば良いのだろうか。
cakePHPで言うところのコンポーネント、ビヘイビア辺りをイメージしているのですがいまいち不明。
やっぱり日本symfonyユーザー会のsymfony2日本語ドキュメントを読む。
サービスコンテナを取り敢えず読んでみる。
ふむふむ。
- app/config/config.ymlにserviceを追加して
- コントローラーに $mailer = $this->get('my_mailer');って書く
...あれ?Mailerクラスはどこ書くの?
違うとこも読む。
セマンティック...
???Acme/HelloBundle/DependencyInjection/HelloExtension.phpをMailerとして書くの?
意味不明すぎる。英語が読めたらなぁ...
取り敢えず自力で頑張ってみる。
以下一応できたのでその結果。symfony2の規約として正しいかどうか不明。でも出来た。
#\src\Acme\PagesBundle\DependencyInjection\Carrier.php
namespace Acme\PagesBundle\DependencyInjection;
use Symfony\Component\HttpFoundation\Request;
class Carrier
{
}
#\src\Acme\PagesBundle\Controller\PagesContller.php
use Acme\PagesBundle\DependencyInjection\Carrier;
...
public function indexAction()
{
$carrier = new Carrier();
}
DependencyInjectionは依存性の注入って意味らしいです。なのでこの直下に作りたいクラスを書く。
コントローラーでuseで書いたクラスを呼び出せるように設定。new Carrier();でインスタンス生成。
って感じです。
これで良いのか不明。でも出来たし、よしとする。
初めまして、Symfonyユーザー会のものです。
返信削除まずドキュメントのサービスコンテナのページで説明しているMailerクラスの配置場所ですが、バンドルのディレクトリ直下に配置しているようですね。
また、今回作られているようにコントローラ内で直接利用するライブラリクラスは、DependencyInjectionディレクトリではなくて、単純にバンドルディレクトリ直下や、Util、Request等ライブラリに合わせたディレクトリを作って配置すればOKです。
DependencyInjectionはサービスコンテナの設定関連のファイルを置く場所なので、そういう機能が必要になるまでは、なにもいじらないと考えていただければよいかと思います。