Laravel4で多言語 Web サイトを構築しています。
データベースには、複数の言語のシリアル化された値を含む「コンテンツ」という名前の列があります。例えば:
a:3:{s:2:"gb";s:15:"This is English";s:2:"es";s:5:"Hola!";s:2:"si";s:19:"Slovenija je zakon!";}
シリアル化された配列には次が含まれます。
- セッションから取得した言語の略語
- 入力フィールドからのコンテンツ
データベースに新しい言語を追加すると、新しいシリアル化された文字列が作成されます。すごい!しかし、その文字列をシリアル化解除して値を追加しようとすると、次のエラーが発生します。
unserialize() [<a href='function.unserialize'>function.unserialize</a>]: Error at offset 0 of 30 bytes
何が起こっているのですか?エラーの意味は理解できますが、データベースの値がシリアル化された文字列であると確信しているため、意味がありません。
public function setContentAttribute($value)
{
$lang = (Session::has('my.locale') ? Session::get('my.locale') : Config::get('app.locale'));
/* Create new serialized string */
if(empty($this->content)) {
$data[$lang] = $value['content'];
$this->attributes['content'] = serialize($data);
/* Update values */
} else {
$data = $this->content;
$data = unserialize($data)
$data[$lang] = $value['content'];
$this->attributes['content'] = serialize($data);
}
}
PS:データベースに値を追加するためにミューテーターを使用しています。
十分に明確であることを願っています。不明な点があればコメントいただければ修正します。
ありがとう!