プラグインとか
第二回symfony勉強会
秋元裕樹
ならべて.com/アジアジン/サイボウズ・ラボ株式会社
今日の内容
- 自己紹介
- プラグインとは?
- サイトにFAQを追加
- サイトからtwitterへ投稿
- サイトにRSSを追加
- サイトにブックマークを追加
symfonyプラグインとは
- symfonyの機能を追加できるパッケージ
- 公式サイトに現在312個。その他作者がブログ等で配布しているものも
- 決まった手順でまとめておくと、symfonyコマンドで管理(追加・削除)できる
プラグインの使い方
公式マニュアルにある通りですが…
- symfony plugin:install (PEARチャネル)
- symfony plugin:install http://.../..tgz // PEARパッケージ
- svn checkout http://svn.symfony-project.com/plugins/sfHogePlugin sfHogePlugin
- svn:externalsでマップ
プラグインの使い方(続き)
- ライブラリだけなら、置いただけで使える(cc→autoload)
- プラグインの中に入ったmoduleを使うときは、settings.ymlでenableにする
symfonyプラグインの(現行の)問題点
- symfonyバージョン違いへの対応
- プラグインの質 != フレームワークの質
- マルチバイト(日本語)対応
実績のあるプラグイン
symfoniansを例に
- symfonyで作られた国際化対応オープンソースSNS
- symfonyのOpen Sourceでは一番大きくて活発かも
- symfony1.2に対応、公式pluginを多用
symfoniansが使っているプラグイン(1)
少なくとも、使えるレベルとわかる
- sfCryptographpPlugin: CAPTCHA (参考)
- sfCSRFPlugin: CSRF対策
- sfFeed2Plugin: フィード提供
- sfGuardPlugin: ユーザ管理
- sfI18nExtractPlugin: 国際化リソース抽出(CLI)
symfoniansが使っているプラグイン(2)
- sfLucenePlugin: 全文検索エンジンLucene
- sfPagerNavigationPlugin: ページャ
- sfSwiftPlugin: メール送信 (PEAR::Mail相当)
- sfThumbnailPlugin: サムネイル
- sfWebBrowserPlugin: 他HTTPサーバへのアクセス(PEAR::HTTP_Request相当)
symfoniansが使っているプラグイン(3)
Model系プラグイン
- sfCryptographpPlugin: CAPTCHA (参考)
- sfPropelActAsSluggableBehaviorPlugin: URL中のidにslugをつけられる
- sfPropelActAsTaggableBehaviorPlugin: タグ機能をつける
- sfPropelMigrationsLightPlugin: スキーマ変更でDB変更を支援する
- sfPropelAlternativeSchemaPlugin: スキーマの拡張を支援する
- sfPropelActAsLocalizableBehaviorPlugin: i18n用(sfとついてるけど公式サイトにない)
今日の発表はsymfony1.1ベース
- 1.0, 1.2では細かく違うところがあるかもしれません。
- でも、最終的にはソース展開してplugins下にコピペすると動くこと多いよ!/li>
Feed(RSS/Atom)プラグイン
- sfFeed2Plugin
- 時間的におさまらないので今回は割愛
sfFaqPlugin利用
> mkdir symfony_apps/faq
> cd symfony_apps/faq
> symfony generate:project faq
> symfony generate:app frontend
// 管理側アプリも作っておく
> symfony generate:app backend
> symfony generate:module frontend default
sfFaqPlugin/httpd.conf
VirtualHostの設定に追加
Alias /faq/sf "c:/work/symfony11/PEAR/data/symfony/web/sf"
Alias /faq "C:/work/akimotojp/symfony_apps/faq/web"
sfFaqPlugin/データベース
databases.yml
dsn: mysql://user:pass@localhost/faq
encoding: utf8
propel.ini
propel.database.createUrl = mysql://user:pass@localhost/
propel.database.url = mysql://user:pass@localhost/faq
sfFaqPlugin/ビルド
- symfony propel:build-all
- symfony propel:data-load frontend
apps/frontend/config/settings.yml
enabled_modules: [sfFaq]
apps/backend/config/settings.yml
enabled_modules: [sfFaqAdminCategories, sfFaqAdminFaq]
sfFaqPlugin/使う
- symfony cc
- http://akimotojp/faq/frontend_dev.php/sfFaq
- http://akimotojp/faq/backend_dev.php/sfFaqAdminCategories
- http://akimotojp/faq/backend_dev.php/sfFaqAdminFaq
sfFaqPlugin/カスタマイズ
apps/frontend/config/app.yml
all:
sfFaqPlugin:
title: "よくある質問"
separator: '-'
question_separator: '<hr />'
first_category_by_default: true
first_question_by_default: true
js: true
sfFaqPlugin/このあと
- v1.0.1, 1.1のパッチを当てる
- タイトルから作られるslugが日本語で空になる
- routing.ymlを調整してわかりやすいURLに
- キャッシュ期間を調整
- CSSの調整
twitterプラグイン
- idTwitterClientPlugin
- sfWebBrowserPlugin (外部HTTPサーバへのアクセス)
twitterプラグイン/インストール
- symfony plugin:install sfWebBrowserPlugin
- http://www.symfony-project.org/plugins/sfWebBrowserPlugin
- symfony plugin:install idTwitterClientPlugin
- http://www.symfony-project.org/plugins/idTwitterClientPlugin
twitterプラグイン/バグ
- http://trac.symfony-project.org/ticket/4647
- http://trac.symfony-project.org/ticket/4648
twitter/いつ投稿するか
投稿のタイミング
- ユーザアクションで投げる
- queue等を見てcronで投げる
twitter/タスク作成
symfony1.1から
- symfony generate:task my:twitter-post
- コマンドの雛形ができる
- lib/task/myTwitterpostTask.class.php
- symfony my:twitter-postで呼べる
twitter/タスク編集
lib/task/myTwitterpostTask.class.php
// add arguments here, like the following:
$this->addArgument('application', sfCommandArgument::REQUIRED,
'The application name');
protected function execute($arguments = array(), $options = array())
{
$t = new idTwitterClient('user','pass');
$t->StatusUpdate('I\'m updating my status...');
}
twitter/タスク実行
- symfony my:twitter-post
- twitter.comで確認