Открыть список
Как стать автором
Обновить

Немного о symfony с doctrine под Linux

Symfony
Начиная изучать symfony, первым делом посмотрел статьи на хабре. Есть переводы, в которых рассказано как сделать свой проект на symfony, где за основу взят sandbox. Мне интересно было разобраться, как установить и настроить symfony + doctrine имея только исходник фреймворка. Проект мне предстоит делать большой, поэтому в этой статье расскажу с чем мне удалось познакомиться.


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


Вопросы:


  1. Имеется таблица с тремя внешними ключами на один ID. В Doctrine я описал их следующим образом:
    1. relations:
    2. Tblaccount:
    3. foreignAlias: tbltransaction
    4. local: intinaccountid
    5. foreign: intaccountid
    6. type: one
    7. foreignType: many
    8. Tblaccount:
    9. foreignAlias: tbltransaction
    10. local: intoutaccountid
    11. foreign: intaccountid
    12. type: one
    13. foreignType: many
    14. Tblaccount:
    15. foreignAlias: tbltransaction
    16. local: intfeeaccountid
    17. foreign: intaccountid
    18. type: one
    19. foreignType: many


    После doctrine:build-sql в SQL генерируется только последняя связь:
    1. ALTER TABLE tbltransaction ADD FOREIGN KEY (intfeeaccountid) REFERENCES tblaccount(intaccountid);

    Как сделать чтобы были созданы все внешние ключи?

  2. У меня весь проект и сам symfony лежит в одной папке. Правильно ли это? Как вы располагаете проект?

Спасибо.

P.S.


Давольно долго жду последнего голоса на получения инвайта для друга. Буду благодарен.
Теги:phpsymfonyframeworkdoctrine
Хабы: Symfony
Всего голосов 10: ↑4 и ↓6 -2
Просмотры1.5K

Похожие публикации

Лучшие публикации за сутки