A typical Developer Blog
by Gordon Franke
Icon

Wechseln von Doctrine to Doctrine_Core mit einem Befehl

Um deinen Code von Doctrine auf Doctrine_Core umzustellen kannst du folgenden Befehl verwenden

1
for fl in `find apps/ config/ lib/ test/ -name *.php`; do mv $fl $fl.old; sed 's/Doctrine::/Doctrine_Core::/g' $fl.old > $fl; rm -f $fl.old; done

Wenn du ein Plugin hast benutze folgenden Befehl

1
for fl in `find . -name *.php`; do mv $fl $fl.old; sed 's/Doctrine::/Doctrine_Core::/g' $fl.old > $fl; rm -f $fl.old; done

Wie kann ich eingebettete Formulare oder einzelne Felder abhängig von einem Formularfeld verwenden?

Du hast ein Registrierungsformular mit einem Feld account_type und zwei eingebetteten Formularen Company und Address.

Du willst das eingebettete Company Formular entfernen, wenn das Feld account_type sfGuardUserProfile::TYPE_PRIVATE entspricht, andernfalls willst du das eingebettete Address Formular entfernen.

Die Lösung ist die bind Methode in deinem Formular zu überschreiben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  public function bind(array $taintedValues = null, array $taintedFiles = null)
  {
    // unset request param and validator
    if($taintedValues['account_type'] == sfGuardUserProfile::TYPE_PRIVATE)
    {
      unset(
        $taintedValues['Company'],
        $this->validatorSchema['Company']
      );
    }
    else
    {
      unset(
        $taintedValues['Address'],
        $this->validatorSchema['Address']
      );
    }
 
    parent::bind($taintedValues, $taintedFiles);
  }

Wie kann ich die Anzahl der Datenbank Queries in meinem Unit Test überprüfen?

1
2
3
$manager    = new sfDatabaseManager($configuration);
$connection = $manager->getDatabase('doctrine')->getDoctrineConnection();
$connection->count();

Wie kann ich ein symfony event aus dem doctrine model herraus aufrufen?

1
2
$dispatcher = sfProjectConfiguration::getActive()->getEventDispatcher();
$dispatcher->notify($event);

Bash Skript zum Erstellen eines Symfony Projekts mit sfDoctrinePlugin, sfDoctrineGuardPlugin und sfDoctrineGuardExtraPlugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/bash
 
# config
PROJECTNAME=TEST;
APPNAME=frontend;
AUTHORNAME=gfranke;
CSRFSECRET=UniqueSecret;
 
#DBDSN="sqlite:%SF_DATA_DIR%/sandbox.db";
DBDSN="mysql:host=localhost;dbname=symfony_build_with_guard";
DBUSER=root;
DBPASS="";
 
SYMFONYTAG=RELEASE_1_2_4;
 
# sfGaurdExtraPlugin don't work with propel
ORM=doctrine;
 
 
# remove existing files
rm apps/ web/ plugins/ lib/ log/ config/ cache/ data/ doc/ symfony test/ vendor/symfony_plugins/ -Rf;
 
# make vendor dir
if ! [ -d vendor ]; then
  mkdir vendor;
fi
 
# make symfony vendor dir
if ! [ -d vendor/symfony ]; then
  mkdir vendor/symfony;
fi
 
# get symfony
if ! [ -d vendor/symfony/${SYMFONYTAG}_lib ]; then
  svn export http://svn.symfony-project.com/tags/${SYMFONYTAG}/lib vendor/symfony/${SYMFONYTAG}_lib;
fi
if ! [ -d vendor/symfony/${SYMFONYTAG}_data ]; then
  svn export http://svn.symfony-project.com/tags/${SYMFONYTAG}/data vendor/symfony/${SYMFONYTAG}_data;
fi
 
# make current links for fast switch
if ! [ -L vendor/symfony/current_lib ]; then
  ln -s RELEASE_1_2_4_lib vendor/symfony/current_lib;
fi
if ! [ -L vendor/symfony/current_data ]; then
  ln -s RELEASE_1_2_4_data vendor/symfony/current_data;
fi
 
# only for build
if ! [ -L vendor/symfony/lib ]; then
  ln -s current_lib vendor/symfony/lib;
fi
if ! [ -L vendor/symfony/data ]; then
  ln -s current_data vendor/symfony/data;
fi
 
# init symfony
php vendor/symfony/data/bin/symfony generate:project $PROJECTNAME;
 
# correct symfony lib
sed "3d"  config/ProjectConfiguration.class.php2;
sed "3irequire_once dirname(__FILE__).'/../vendor/symfony/current_lib/autoload/sfCoreAutoload.class.php';"  config/ProjectConfiguration.class.php;
 
# remove build temp dirs
rm vendor/symfony/lib vendor/symfony/data;
 
# set author name
./symfony configure:author $AUTHORNAME;
 
# generate app
./symfony generate:app --escaping-strategy=on --csrf-secret=$CSRFSECRET $APPNAME;
 
# get plugins
mkdir vendor/symfony_plugins;
if [ "$ORM" = "propel" ]; then
  SVNVERSION=`svn info http://svn.symfony-project.com/plugins/sfGuardPlugin/branches/1.2/ | sed '8s/[^0-9]*//' | sed '1,7d' | sed '2,4d'`;
  svn export http://svn.symfony-project.com/plugins/sfGuardPlugin/branches/1.2/ vendor/symfony_plugins/sfGuardPlugin;
 
  ln -s sfGuardPlugin_$SVNVERSION vendor/symfony_plugins/sfGuardPlugin_current;
  ln -s ../vendor/symfony_plugins/sfGuardPlugin_current plugins/sfGuardPlugin;
 
  SVNVERSION=`svn info http://svn.symfony-project.com/plugins/sfGuardExtraPlugin/branches/1.2/ | sed '8s/[^0-9]*//' | sed '1,7d' | sed '2,4d'`;
  svn export http://svn.symfony-project.com/plugins/sfGuardExtraPlugin/branches/1.2/ vendor/symfony_plugins/sfGuardExtraPlugin;
 
  ln -s sfGuardExtraPlugin_$SVNVERSION vendor/symfony_plugins/sfGuardExtraPlugin_current;
  ln -s ../vendor/symfony_plugins/sfGuardExtraPlugin_current plugins/sfGuardExtraPlugin;
 
  # database config
  ./symfony configure:database "sqlite:%SF_DATA_DIR%/sandbox.db"
else
  sed '11s/sfDoctrinePlugin/sfPropelPlugin/'  config/ProjectConfiguration.class.php2;
  mv config/ProjectConfiguration.class.php2 config/ProjectConfiguration.class.php;
 
  SVNVERSION=`svn info http://svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/branches/1.2/ | sed '8s/[^0-9]*//' | sed '1,7d' | sed '2,4d'`;
  svn export http://svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/branches/1.2/ vendor/symfony_plugins/sfDoctrineGuardPlugin_$SVNVERSION;
 
  ln -s sfDoctrineGuardPlugin_$SVNVERSION vendor/symfony_plugins/sfDoctrineGuardPlugin_current;
  ln -s ../vendor/symfony_plugins/sfDoctrineGuardPlugin_current plugins/sfDoctrineGuardPlugin;
 
  SVNVERSION=`svn info http://svn.symfony-project.com/plugins/sfDoctrineGuardExtraPlugin/branches/1.2/ | sed '8s/[^0-9]*//' | sed '1,7d' | sed '2,4d'`;
  svn export http://svn.symfony-project.com/plugins/sfDoctrineGuardExtraPlugin/branches/1.2/ vendor/symfony_plugins/sfDoctrineGuardExtraPlugin_$SVNVERSION;
 
  ln -s sfDoctrineGuardExtraPlugin_$SVNVERSION vendor/symfony_plugins/sfDoctrineGuardExtraPlugin_current;
  ln -s ../vendor/symfony_plugins/sfDoctrineGuardExtraPlugin_current plugins/sfDoctrineGuardExtraPlugin;
 
  # database config
  ./symfony configure:database --name=doctrine --class=sfDoctrineDatabase $DBDSN $DBUSER $DBPASS
 
  # remove propel connection
  sed '2,6s/propel/doctrine/'  config/databases.yml2;
  mv config/databases.yml2 config/databases.yml;
fi
 
# enabled modules and change login module and action
sed "31i    # Activated modules from plugins or from the symfony coren    enabled_modules: [default, sfGuardAuth, sfGuardRegister, sfGuardForgotPassword]n"  apps/frontend/config/settings.yml2;
mv apps/frontend/config/settings.yml2 apps/frontend/config/settings.yml;
 
# deactivate guard routes
sed "2d"  apps/frontend/config/app.yml2;
echo "all:n  sf_guard_plugin:n    routes_register: falsen" >> apps/frontend/config/app.yml2;
mv apps/frontend/config/app.yml2 apps/frontend/config/app.yml;
 
# insert guard routes
sed "6isf_guard_signin:n  url:   /loginn  param: { module: sfGuardAuth, action: signin }nnsf_guard_signout:n  url:   /logoutn  param: { module: sfGuardAuth, action: signout }n"  apps/frontend/config/routing.yml2;
mv apps/frontend/config/routing.yml2 apps/frontend/config/routing.yml;
 
# create db file
touch data/sandbox.db
chmod 777 data
chmod 777 data/sandbox.db
 
# extends sfGuardSecurityUser
sed '3s/sfBasicSecurityUser/sfGuardSecurityUser/'  apps/frontend/lib/myUser.class.php2;
mv apps/frontend/lib/myUser.class.php2 apps/frontend/lib/myUser.class.php;
 
# clear cache
./symfony cc
 
# fix permissions
./symfony fix-perms
 
# build db model filter and forms
if [ "$ORM" = "propel" ]; then
  ./symfony propel:build-all --no-confirmation
else
  ./symfony doctrine:build-model
 
  echo "hasColumn('email', 'string', 80, array('notnull' => true, 'unique' => true));
  }
 
  public function getEmailAddress()
  {
    return $this->email;
  }
 
  public function setEmailAddress($email)
  {
    $this->email = $email;
  }
}" > lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php;
 
  echo "from('sfGuardUser u')->where( '(u.username = ? OR u.email = ?) AND u.is_active = ?', array( $usernameOrEmail, $usernameOrEmail, $isActive ) )->execute()->getFirst();
  }
}
" > lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUserTable.class.php;
 
  # schema to inndb
  echo "---
options:
  type: INNODB
"  > config/doctrine/schema.yml
 
  # cleanup
  rm config/schema.yml config/propel.ini
 
  ./symfony doctrine:build-all-reload --no-confirmation
fi
 
# publish assets don't use publish-assets symlink must go to current link
rm web/sfPropelPlugin web/sfProtoculousPlugin;
ln -s ../vendor/symfony/current_data/web/sf/ web/sf;
ln -s ../vendor/symfony/current_lib/plugins/sfProtoculousPlugin/web web/sfProtoculousPlugin;
if [ "$ORM" = "propel" ]; then
  ln -s ../vendor/symfony/current_lib/plugins/sfPropelPlugin/web web/sfPropelPlugin;
else
  ln -s ../vendor/symfony/current_lib/plugins/sfDoctrinePlugin/web web/sfDoctrinePlugin;
fi
 
# clear cache
./symfony cc