Pull to refresh

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

Reading time 3 min
Views 1.9K
Начиная изучать 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.


Давольно долго жду последнего голоса на получения инвайта для друга. Буду благодарен.
Tags:
Hubs:
-2
Comments 17
Comments Comments 17

Articles