引数に書式を与えると、
書式に'%'が含まれる場合はstrftimeで、それ以外の場合は、dateでフォーマットされる。
書式のデフォルトは、
timestamp、datetimeの場合
'Y-m-d H:i:s'
dateの場合
'%x'
%x - 時間を除いた日付を現在のロケールに基づき表現します。
timeの場合
'%X'
%X - 日付を除いた時間を現在のロケールに基づき表現します。
「Symfony」カテゴリーアーカイブ
Could not instantiate mail function.
1.0にアップグレードしたら、sfMailで
Could not instantiate mail function.
というエラーが出るようになった。
エラーになるのは、Windowsのみで、Linuxでは正常に動作する。
http://www.symfony-project.com/forum/index.php/m/8660/
上記の解決法を試したが、だめだった。
userのデフォルトcultureを設定する
/apps/APPNAME/config/settings.yml
all: .settings: i18n: on
/apps/APPNAME/config/i18n.yml
default: default_culture: ja_JP
これで、ユーザのデフォルトのcultureがjaになるので、i18nヘルパーなどに反映される。
viewで使用する例:
/apps/APPNAME/config/view.yml
default: http_metas: content-type: text/html metas: title: myproject robots: index, follow description: myproject keywords: myproject language: "<?php $lang = explode('_', sfContext::getInstance()->getUser()->getCulture()); echo $lang[0] ?>" stylesheets: [main] javascripts: [ ] has_layout: on layout: layout
/apps/APPNAME/templates/layout.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php $lang = explode('_', $sf_user->getCulture()); echo $lang[0] ?>" lang="<?php echo $lang[0] ?>"> <head>
セッションのクリアも忘れずに!
たとえば、admin generatorで作成したアプリケーションのソートのパラメータは、user(session)に保存されているので、再作成したりコードを変更した場合は、symfonyのキャッシュクリアだけでなく、セッションのクリア(=Cookieの削除)をしなくてはいけない。
http://www.symfony-project.com/book/trunk/generator
fillinがうまくいかない
http://www.symfony-project.com/book/trunk/fillin
beta1で試してみた。
validate/{actionName}.ymlに
filter:
enabled: on
コンテンツが表示されなくなった。
プロジェクトのアップグレード(to 1.0 beta1)
http://www.symfony-project.com/trac/wiki/HowToUpgradeToLatestBeta
まず、以下のファイルの書き換えをする。
- /SYMFONY => /symfony
- /config/config.php
- /apps/[appname]/config/config.php
...以上で、symfonyコマンドが使えるようになるので、プロジェクトディレクトリから、
symfony upgrade 1.0
を実行する。
あとは、modelのrebuildとclear-cache。
D:\sfprojects\askeet2>symfony upgrade 1.0
>> upgrade 1.0 upgrading propel.ini configuration file
# there are 2 new propel.ini options:
# - propel.builder.addIncludes
# - propel.builder.addComments
# sfConfig::get('sf_i18n_instance') is deprecated
# use sfContext::getInstance()->getI18N()
>> upgrade 1.0 upgrading require in models
# model require must be lib/model/...
# instead of model/...
>> upgrade 1.0 migrate activate to enabled
# activated_modules: is deprecated in settings.yml
# use enabled_modules:
# activate: is deprecated in cache.yml
# use enabled:
# active: is deprecated in logging.yml
# use enabled:
# sf_logging_active is deprecated in *.php
# use sf_logging_enabled
>> file- D:\sfprojects\askeet2/SYMFONY
>> file+ D:\sfprojects\askeet2/symfony
>> chmod 777 D:\sfprojects\askeet2\symfony
>> upgrade 1.0 upgrading schemas
# schema.xml must now have a database package
# default is package="lib.model"
>> upgrade 1.0 add test bootstrap files
>> dir+ D:\sfprojects\askeet2/test/bootstrap
>> file+ D:\sfprojects\askeet2/test/bootstrap/functional.php
>> file+ D:\sfprojects\askeet2/test/bootstrap/unit.php
>> upgrade 1.0 upgrading main config.php
>> upgrade 1.0 upgrading application "frontend"
>> upgrade 1.0 upgrading config.php
>> upgrade 1.0 upgrading filters.yml
# filters.yml now contains core symfony filters
>> upgrade 1.0 upgrading deprecated helpers
>> upgrade 1.0 upgrading date form helpers
>> upgrade 1.0 upgrading deprecated helpers in generator.yml
>> upgrade 1.0 upgrading cache configuration
# "type" has been removed in cache.yml
# read the doc about "with_layout"
>> upgrade 1.0 upgrading deprecated methods in actions
>> upgrade 1.0 upgrading view configuration
>> upgrade 1.0 upgrading sf/ path configuration
>> upgrade 1.0 done
>> dir+ D:\sfprojects\askeet2/plugins
# WARNING: you must re-install all your plugins
# Now, you must:
# - rebuild your model classes: symfony propel-build-model
# - clear the cache: symfony cc
filterからforward404するには?
filterからforward404したいと思って、
$this->getContext()->getController()->getAction($this->getContext()->getModuleName(), $this->getContext()->getActionName())->forward404Unless($office);
とやったところ、
sfError404Exception: in D:\php5\PEAR\symfony\action\sfAction.class.php on line 129
というエラー。
これは、例外をスローしているだけのようだ。
これは、filterは、forwardするたびに実行されてしまうからのようだ。
filterの実行条件が
if ($this->isFirstCall()) { ... }
の場合、fowardするたびに実行してしまう。
以下のように修正すると、意図したとおり、forwardされた。
if ($this->isFirstCall() && !($this->getContext()->getModuleName() == sfConfig::get('sf_error_404_module') && $this->getContext()->getActionName() == sfConfig::get('sf_error_404_action'))) { ... }
1.0からsymfonyディレクトリがフルパスになった
symfony 1.0 から、$project_dir/config/config.phpで、
// symfony directories
$sf_symfony_lib_dir = 'D:\php5\pear/symfony';
$sf_symfony_data_dir = 'D:\php5\pear\data/symfony';
のように、フルパス指定になった。
したがって、rsyncのrsync_exclude.txtに、
/config/config.php
を追加。
schema.yml syntax
http://www.symfony-project.com/book/trunk/model
databse.yml
prod:
propel:
param:
host: mydataserver
username: myusername
password: xxxxxxxxxx
all:
propel:
class: sfPropelDatabase
param:
phptype: mysql
host: localhost
database: blog
username: root
password:
compat_assoc_lower: true
# datasource: propel
# encoding: utf8
# persistent: true
schema.yml basic
propel:
blog_article:
_attributes: { phpName: Article }
id:
title: varchar(255)
content: longvarchar
created_at:
blog_comment:
_attributes: { phpName: Comment }
id:
article_id:
author: varchar(255)
content: longvarchar
created_at:
propel:
blog_article:
id: { type: integer, required: true, primaryKey: true, autoincrement: true }
name: { type: varchar , size: 50, default: foobar, index: true }
group_id: { type: integer, foreignTable: db_group, foreignReference: id, onDelete: cascade }
schema.yml syntax detail
The column parameters are:
- type: Propel column type. See Propel list of types for more details. The compact syntax (varchar(50)) is also supported as a type value.
- size: for VARCHAR type columns, the size of the string. Note that a column defined as varchar(50) in basic syntax is defined as { type: varchar , size: 50 } in extended syntax.
- required: false by default, set it to true if you want the column to be required
- default: default value
- primaryKey: boolean, to be set to true for primary keys
- autoincrement: boolean, to be set to true for columns of type integer that need to be auto-increment
- sequence: sequence name for databases using sequences for auto-increment columns (e.g. PostgreSQL or Oracle)
- index: boolean, to be set to true if you want a simple index or to unique if you want a unique index to be created on the column
- foreignTable: to create a foreign key to another table.
- foreignReference: the name of the related column if a foreign key is defined via foreignTable
- onDelete: if set to cascade for a foreign key, records in this table are deleted when a related record in the foreign table is deleted.
- isCulture: to be set to true for culture columns in localized content tables (see the internationalization chapter)
Type
boolean
integer
float
date >= 1970-01-01
bu_date
timestamp >= 1970-01-01
bu_timestamp
varchar(size) <= 256 characters
longvarchar <= 65kb
Schema conventions
Empty columns called id are considered to be primary keys.
Empty column ending with _id are considered to be foreign keys, and the related table is automatically determined according to the first part of the column name.
Empty columns called created_at are automatically set to the timestamp type.
For all these columns, you don't need to specify any type, since symfony will deduce their format from their name.
Foreign key
_foreign_keys:
my_foreign_key:
foreign_table: db_user
onDelete: cascade
references:
- { local: user_id, foreign: id }
- { local: post_id, foreign: id }
Index
propel:
blog_article:
id:
title: varchar(50)
created_at:
_indexes:
my_index: [title, user_id]
_uniques:
my_other_index: [created_at]
schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<database name="propel" defaultIdMethod="native" noxsd="true">
<table name="blog_article" phpName="Article">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="title" type="varchar" size="255" />
<column name="content" type="longvarchar" />
<column name="created_at" type="timestamp" />
</table>
<table name="blog_comment" phpName="Comment">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="article_id" type="integer" />
<foreign-key foreignTable="blog_article">
<reference local="article_id" foreign="id"/>
</foreign-key>
<column name="author" type="varchar" size="255" />
<column name="content" type="longvarchar" />
<column name="created_at" type="timestamp" />
</table>
</database>
symfonyをプロジェクトにインストールする(Windows編)
1. symfonyのパッケージ(.tgz)をダウンロードして展開する
2. 展開したディレクトリ構造は以下のようになる
package.xml
symfony/
LICENSE
data/
lib/
3. 以下のファイルをプロジェクト内にコピーする
symfony/data/* -> myproject/data/symfony/
symfony/lib/* -> myproject/lib/symfony/
4. symfony.batをプロジェクトルートにコピー
myproject/data/symfony/bin/symfony.bat -> myproject/
myproject/data/symfony/bin/symfony.sh -> myproject/
5. コピーしたmyproject/symfony.batとsymfony.shを編集
"@DATA-DIR@"を"data"に変更して保存する。
6. webデータ(css、jsファイルなど)をコピーする
myproject/data/symfony/web/sf/* -> myproject/web/sf/
以上。
http://www.symfony-project.com/book/trunk/installation
http://www.symfony-project.com/askeet/22