Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Nieporządana zmiana charsetu i collation przez Symfony
Forum PHP.pl > Forum > PHP > Frameworki
SnakeEater
Witam,
Mam taki popularny problem, że przeglądarka wyświetla mi źle polskie znaki. W settings.yml ustawiłem UTF-8. W templacie ustawiłem xml-lang oraz lang na pl, a charset na utf-8. Mimo to polskie znaki są źle wyświetlane. Zastosowałem pewną sztuczkę, która naprawia problem:
1. Usunąłem wszystkie tabele z bazy, zmieniłem charset dla mojej bazy poprzez ALTER ... oraz collation odpowiednio na utf8 i utf8_polish_ci.
2. Przekopiowałem schema sql do klienta mysql i w ten sposób stworzyłem tabele. Tabele odziedziczyły collation z ustawień dla bazy.
3. Wklepałem doctrine:data-load.
Wszystko po takiej operacji działa perfect smile.gif
W momencie jednak gdy zrobię build-all --and-load wszystko wraca do poprzedniego stanu. Charset i collation dla bazy jak i samych tabel ustawiają się na domyślny dla bazy czyli jakiś latin1 swedish. Da się coś zrobić żeby Symfony używało utf-8?

Częściowo rozwiązałem problem
Dodałem w settings.yml
Kod
attributes:
  default_table_charset: utf8
  default_table_collate: utf8_general_ci

Mimo tego po każdym wykonaniu doctrine:build-all --and-load ustawienia dla bazy danych zmieniają się na domyślne dla całego systemu mysql. Sprawdzam to w INFORMATION_SCHEMA/TABLES. W sumie sprawa jest załatwiona, ale nie wiem czy dobrze ustawiać kodowanie settings.yml. Czy nie lepiej gdyby Symfony korzystało z ustawień dla bazy? Jeżeli utf8_general_ci pasuje dla innych języków? Co jeżeli jakiś Czech zechce zainstalować moje oprogramowanie? Czy nie bedzie musiał zmieniać ustawień w settings.yml?
bikerszymek
dodaj na poczatku schema.yml

CODE
options:
type: INNODB
collate: utf8_general_ci
charset: utf8
SnakeEater
Dodałem na początku schema.yml no i:
Kod
Failing Query: "CREATE TABLE collate (id BIGINT AUTO_INCREMENT, PRIMARY KEY(id)) ENGINE = INNODB"

(Symfony 1.4)

Działa perfect. Dzięki. Mój błąd był taki, że zostały pliki modelów stworzone wcześniej bo nie dodałem spacji w yaml. Czy jest zatem jakaś opcja, żeby usunęło wszystkie pliki z doctrine/base zanim stworzy nowe?
Crozin
Usunąć pliki modelów/filtrów/formularzy niezdefiniowanych w schema.yml możesz przy użyciu:
Kod
$ ./symfony doctrine:clean
SnakeEater
Thank You.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.