symfonyでは、urlパラメータに以下の文字は使用できない。
? & /
「?」と「&」は、routing処理で区切り文字になっているため。
「/」は、apacheのpathinfoで%2Fを使用できないからだろう。これは、apacheでpathinfoを使用しているサイトはみな同じだ。
voxでは「?」と「&」はOKだが、「/」はつけることはできるが、「/」タグの記事一覧は見ることはできない。Not Foundになる。
movable type は「?」「&」「/」とも、タグとしてつけることはできない。
「Symfony」カテゴリーアーカイブ
デバッグメッセージの出力方法
// in an action $this->logMessage($message, $level); // in a template <?php echo log_message($message, $level) ?>
例:
<code> // in a template <?php use_helper('Debug') ?> <?php echo log_message('{mainActions} been there', 'err') ?> // in an action $this->getLogger()->info($message); $this->getLogger()->err($message); $this->getLogger()->warning($message); // from anywhere in your application sfContext::getInstance()->getLogger()->info($message); sfContext::getInstance()->getLogger()->err($message); sfContext::getInstance()->getLogger()->warning($message); </code>
There are 8 levels of log messages:
emerg, alert, crit, err, warning, notice, info, debug
http://www.symfony-project.com/book/trunk/debug
fragment cache
<?php if (!cache ($name, $lifeTime): ?>
...
cache_save();
<?php endif; ?>
でのキャッシュは、アプリケーションのsettings.ymlで、
cache: on
にする必要がある。
(devだけでなく、prodでも!)
slot type cacheはsymfony0.7.1914では動作しない
askeetのtutorialでは、slot type cacheはsymfony0.6では動作しないとあるが、0.7.1914でも動作しない。
sfConfig
sfConfig::set($name, $value), sfConfig::get($name, $default) は定数のようにグローバルに使用できるが、変更もできる。
default_culture設定が効かない
default_culture設定が効かない
app/frontend/config/setting.yml
all: .settings: default_culture: ja_JP
解決方法は、以下を参照。
userのデフォルトcultureを設定する
データベース接続を取得する
名前を指定して接続を取得
$con = sfContext::getInstance()->getDatabaseConnection('name');
または
$con = Propel::getConnection('name');
'name'を指定しない場合はデフォルトデータベースの接続を返す。
forwardすると、actionのインスタンス変数が引き継がれない
forwardすると、$thisのインスタンス変数が引き継がれない。(forward先のアクションのviewで元アクションでセットしたインスタンス変数が使えない。)
なので、forwardする代わりに、
return array('api', 'errorSuccess');
とした。
0.6.3ではこれでOKだったが、0.7.1914では、template/xxxxArray.phpが見つかりませんというエラーになる。(xxxxはアクション名)
したがって、
forwardを使い、forward先で使用する値は、$this->getRequest()->setAttribute($name, $value)
で保存しておく。
sfRequest->addHttpMeta($key, $value, $override = true)は、$keyをnomalizeしてセット
sfRequest->addHttpMeta($key, $value, $override = true)は、$keyをnomalizeしてセットするので注意!
たとえば、content-typeはContent-Typeとなる。
そのため、view.ymlでhttp_metasを設定して、addHttpMetaで設定したkeyを上書きする場合、上記の例では、
content-type: text/xml
では上書きされないようである。
Content-Type: text/xml
とすると、うまくいった。
両方書いてもokだった。
sfAction->sendEmail($module, $action)
sfAction->sendEmail($module, $action)
The ->sendEmail() method of the sfAction class is a special kind of ->forward() that executes another action but comes back afterward (it doesn't stop the execution of the current action). In addition, it returns a raw email that can be written into a log file (you will find more information about the way to log information in the debug chapter of the symfony book).