Начиная изучать symfony, первым делом посмотрел статьи на хабре. Есть переводы, в которых рассказано как сделать свой проект на symfony, где за основу взят sandbox. Мне интересно было разобраться, как установить и настроить symfony + doctrine имея только исходник фреймворка. Проект мне предстоит делать большой, поэтому в этой статье расскажу с чем мне удалось познакомиться.
"/home/nutt/workspace/htdocs" — папка где будет лежать проект и куда смотрит apache.
Загружаем и распаковываем исходник в папку с проектом
После этого переходим непосредственно в папку и создаем проект. После выполнения команды, symfony создаст все необходимые папки.
Я разрабатываю проект в ubuntu на VirtualBox, поэтому следующий корректив возможно вам не понадобиться. Для того чтобы было видно develop-панель (http://localhost/frontend_dev.php/) нужно подправить в:
Далее нужно настроить apache (/etc/apache2/sites-enabled/000-default):
По-умолчанию в symfony используется Propel. Мне для моего проекта нужно было переключиться на Doctrine (sfDoctrinePlugin). Для этого
нужно отредактировать файл ProjectConfiguration.class.php в ~/workspace/htdocs/config
Было:
Удалить из конфига Propel:
Добавить соединение для doctrine:
Отредактируем файл schema.yml в ~/workspace/htdocs/config/doctrine/schema.yml
Генерируем классы:
Строим запросы SQL:
Выполняем SQL:
Спасибо.
Давольно долго жду последнего голоса на получения инвайта для друга. Буду благодарен.
0 шаг: Общее
"/home/nutt/workspace/htdocs" — папка где будет лежать проект и куда смотрит apache.
1 шаг: Установка
Загружаем и распаковываем исходник в папку с проектом
/home/nutt/workspace/htdocs
После этого переходим непосредственно в папку и создаем проект. После выполнения команды, symfony создаст все необходимые папки.
nutt@nutt:~/workspace/htdocs$ sudo ./data/bin/symfony generate:project test
Я разрабатываю проект в ubuntu на VirtualBox, поэтому следующий корректив возможно вам не понадобиться. Для того чтобы было видно develop-панель (http://localhost/frontend_dev.php/) нужно подправить в:
~/workspace/htdocs/web/frontend_dev.php
if(!in_array(@$_SERVER['REMOTE_ADDR'], array('[ваш IP], '::80')))
Далее нужно настроить apache (/etc/apache2/sites-enabled/000-default):
<VirtualHost [ваш IP]:80>
ServerName nutt.com
DocumentRoot /home/nutt/workspace/htdocs/web
php_admin_value register_globals Off
RewriteLog "/var/log/apache2/mod_rewrite.log"
RewriteLogLevel 2
Alias /sf /home/nutt/workspace/htdocs/data/web/sf
<Directory /home/nutt/workspace/htdocs/web>
Options Indexes FollowSymLinks MultiViews ExecCGI
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
2 шаг: Doctrine
По-умолчанию в symfony используется Propel. Мне для моего проекта нужно было переключиться на Doctrine (sfDoctrinePlugin). Для этого
нужно отредактировать файл ProjectConfiguration.class.php в ~/workspace/htdocs/config
Было:
public function setup()
{
$this->enablePlugins(array('sfDoctrinePlugin'));
$this->disablePlugins(array('sfPropelPlugin'));
}
Стало: public function setup()
{
$this->enablePlugins(array('sfDoctrinePlugin'));
}
Удалить из конфига Propel:
nutt@nutt:~/workspace/htdocs/config$ sudo rm propel.ini
nutt@nutt:~/workspace/htdocs/config$ sudo rm schema.yml
Добавить соединение для doctrine:
nutt@nutt:~/workspace/htdocs$ sudo ./data/bin/symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=test" root root
3 шаг: Создаем таблицы с помощью Doctrine
Отредактируем файл schema.yml в ~/workspace/htdocs/config/doctrine/schema.yml
users:
columns:
name: { type: string(255), notnull: true, unique: true }
Генерируем классы:
nutt@nutt:~/workspace/htdocs$ ./data/bin/symfony doctrine:build-model
Строим запросы SQL:
nutt@nutt:~/workspace/htdocs$ ./data/bin/symfony doctrine:build-sql
Выполняем SQL:
nutt@nutt:~/workspace/htdocs$ ./data/bin/symfony doctrine:insert-sql
Вопросы:
- Имеется таблица с тремя внешними ключами на один ID. В Doctrine я описал их следующим образом:
- relations:
- Tblaccount:
- foreignAlias: tbltransaction
- local: intinaccountid
- foreign: intaccountid
- type: one
- foreignType: many
- Tblaccount:
- foreignAlias: tbltransaction
- local: intoutaccountid
- foreign: intaccountid
- type: one
- foreignType: many
- Tblaccount:
- foreignAlias: tbltransaction
- local: intfeeaccountid
- foreign: intaccountid
- type: one
- foreignType: many
После doctrine:build-sql в SQL генерируется только последняя связь:
- ALTER TABLE tbltransaction ADD FOREIGN KEY (intfeeaccountid) REFERENCES tblaccount(intaccountid);
Как сделать чтобы были созданы все внешние ключи?
- У меня весь проект и сам symfony лежит в одной папке. Правильно ли это? Как вы располагаете проект?
Спасибо.
P.S.
Давольно долго жду последнего голоса на получения инвайта для друга. Буду благодарен.