[Silex]MameFormをValidatorExtensionに対応

Posted under Silex by uechoco on 日曜日 15 5月 2011 at 03 : 10 : 30

Silexを使った簡単なサンプルとして@brtriverさんのSilexを試してみた – ぷぎがぽぎの記事が非常に参考になります。この記事から1ヶ月ちょっと経ちまして、私がSilexをいじり始めた現在では、以前はなかったValidator用のExtensionが増えています。勉強がてら、MameFormをValidatorExtensionに対応させてみました。

GitHubリポジトリ:https://github.com/uechoco/MameForm

主な変更点は以下のとおりです:

  • Symfony2のValidatorコンポーネントをgitのサブモジュールとして追加
  • Contactフォームにバリデーションを追加するためのPlain Objectを追加
  • バリデート部をValidationExtensionにあわせて変更
  • twigテンプレート内のバリデーションエラーの出力方法をValidationExtensionにあわせて変更

※バリデーションの修正よりもSwiftMailerをローカルで動かすのに非常に手間取りました。最終的に行なった動作確認方法は、Commit ebf07f28aae543373c074138d5c2ebed3b00fdf9 to fabpot/Silex – GitHubのコミットログに書いてある使用方法を参考に、GmailのSMTPを呼び出してメールを投げました。


[Silex]続・Silex初心者が遭遇する最初のエラー

Posted under Silex by uechoco on 土曜日 14 5月 2011 at 22 : 34 : 43

先日、[Silex]Silex初心者が遭遇する最初のエラーという記事を書きましたが、もう1つ、初心者が遭遇しそうなエラーに遭遇しましたので、書き残しておきます。

今度のエラーは、何もエラーが出ません。display_errors=Onでも、error_reportingがE_ALLでも、画面にもApacheのerror_logには現れません。真っ白い画面のままなんです。

ソースコードはこんな感じです。

php:
  1. <?php
  2. //ini_set('display_errors', 'On');
  3. //error_reporting(E_ALL);
  4.  
  5. require_once __DIR__.'/silex.phar';
  6. $app = new Silex\Application();
  7.  
  8. $app->get('/hello', function () use ($app) {
  9.     $name = $app['request']->get('name');
  10.     return "Hello $name";
  11. });

気づいたのは、どんなURLパスでも受け付けるようになっていること。いつもだったらルーティングのマッチングエラーになるはずですよね。ルーティングすら読み込まれてないのかな?とも思ったのですが、真っ白い画面が出るだけってことを思い出して気づきました。プログラムが実行されていないんだ

忘れていたのはこれでした。

php:
  1. $app->run();

フレームワークが実行されなければ、何も起こりませんよね。人騒がせでした。


[Silex]sliex.pharでPHP Warning: PHP Startup: apc.shm_size now uses M/G suffixes

Posted under Silex by uechoco on 金曜日 13 5月 2011 at 09 : 26 : 32

Silexのドキュメントを読み進めていくと、「silex.pharを実行すればsilexのバージョン確認やアップデートが可能」というフレーズを見つけたので早速試してみたところ、幾つかエラーが発生したので、その解決方法を記録しておきます。

Permission denied

Bash:
  1. $ ./silex.phar
  2. -bash: ./silex.phar: Permission denied

silex.pharを実行可能ファイルのように実行しようとすると起きました。
実行権限がありませんね。chmod で7xxにしましょう。(実は関係なかったんですが...↓)

No such file or directory

Bash:
  1. $ ./silex.phar
  2. ./silex.phar: line 1: ?php: No such file or directory
  3. ./silex.phar: line 3: =: command not found
  4. ./silex.phar: line 5: syntax error near unexpected token `'phar','
  5. ./silex.phar: line 5: `if (in_array('phar', stream_get_wrappers()) && class_exists('Phar', 0)) {'

実行権限を直しても、ファイルが見つからないというエラーです。
そういえば、pharはphpの独自形式なので直接シェルでは実行できないですね。
php ./silex.phar と打つ必要がありました。chmodいらなかった。

PHP Warning: PHP Startup: apc.shm_size now uses M/G suffixes

Bash:
  1. $ php ./silex.phar
  2. PHP Warning:  PHP Startup: apc.shm_size now uses M/G suffixes, please update your ini files in Unknown on line 0

表題のエラーです。環境はMac OS X 10.6 / php 5.3.4 / homebrew派です。
エラーにしっかりと書いてありますが、「現在apc.shm_sizeはM/Gの接尾辞を使います、iniファイルを更新してください」とのこと。
M/Gというのは、メガとギガの単位ですね。

/etc/php.iniを見てみると、たしかに単位が抜けていました。Silex関係なかったですね^^;

TEXT:
  1. [apc]
  2. extension="/usr/local/Cellar/apc/3.1.6/apc.so"
  3. apc.enabled=1
  4. apc.shm_segments=1
  5. apc.shm_size=64
  6. apc.ttl=7200
  7. apc.user_ttl=7200
  8. apc.num_files_hint=1024
  9. ;apc.mmap_file_mask=/tmp/apc.XXXXXX
  10. apc.enable_cli=1

apc.shm_sizeを64から64Mにして保存し、apacheに設定を反映させると、

Bash:
  1. $ php ./silex.phar
  2. Silex version ef49998 2011-05-11 18:49:27 +0200

ちゃんと出ました。

ちなみに4月中旬くらいに配布されていたsilex.pharにはこの機能はないようです。@brtriverさんのSilexを試してみた - ぷぎがぽぎという記事でSilexに興味を持ったので、Silexを使い始めましたが、@brtriverさんのgithubにあったお問い合わせフォームのサンプルコードに含まれていたsilex.pharをそのまま使い続けていたら、バージョン番号は出てきませんでした。最新版のsilex.pharに置き換えたらバージョン番号が出てきましたので、最近できた機能のようですね。


[Silex]Silex初心者が遭遇する最初のエラー

Posted under Silex by uechoco on 金曜日 13 5月 2011 at 00 : 50 : 56

Silexドキュメントの1〜2ページはIntroduction/Usageなのですが、たった数行のコードを入力しただけ(で動くはず)なのに、びくともしなくて右往左往してしまいました。display_errors=Onにしたら、こんな感じ。

Fatal error: Uncaught exception 'Symfony\Component\Routing\Matcher\Exception\NotFoundException' in phar:///path-to-webroot/silex-test/silex.phar/vendor/Symfony/Component/Routing/Matcher/UrlMatcher.php:41 Stack trace: #0 phar:///path-to-webroot/silex-test/silex.phar/src/Silex/RedirectableUrlMatcher.php(13): Symfony\Component\Routing\Matcher\UrlMatcher->match('/') #1 phar:///path-to-webroot/silex-test/silex.phar/src/Silex/Application.php(140): Silex\RedirectableUrlMatcher->match('/') #2 phar:///path-to-webroot/silex-test/silex.phar/vendor/Symfony/Component/EventDispatcher/EventDispatcher.php(84): Silex\Application->onCoreRequest(Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #3 phar:///path-to-webroot/silex-test/silex.phar/vendor/Symfony/Component/EventDispatcher/EventDispatcher.php(16): Symfony\Component\EventDispatcher\EventDispatcher->triggerListener(Object(Silex\Application), 'onCoreRequest', Object(Symfony\Component\HttpKernel\Event\GetResponseEv in phar:///path-to-webroot/silex-test/silex.phar/src/Silex/Application.php on line 144

まぁ、よーく見ると、URLMatcher->match('/') のあとに Routing MatcherのNotFoundExceptionが走っているので、マッチするルーティングルールがないと。なるほどね。たしかにURL見たら / だし、そのURLのルーティングルールは書いてないね。 /hello/Fabien と書かないと動かないわけか。

Twitterでつぶやいたら、@brtriverさん@gilbiteさんから「あるあるw」と返ってきたので、勝手に「Silex初心者が遭遇する最初のエラー」と命名しますw

P.S. どのコードのことを言っているのか分かりにくかったので、ソースコード載せておきます。

php:
  1. <?php
  2. require_once __DIR__.'/silex.phar';
  3.  
  4. $app = new Silex\Application();
  5.  
  6. $app->get('/hello/{name}', function ($name) {
  7.     return "Hello $name";
  8. });
  9.  
  10. $app->run();


Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.