Manch mal hängt der code von einem user attribute ab, also will man das user attribute in seinem functional test überschreiben.
Das Problem ist das die doCall Methode in der sfBrowser Klasse den context neuerstellt und am ende die shutdown Methode für den user und die storage Objekte , zum schreiben der Session daten, aufruft.
Also muss man seine eigene Browser Klasse erstellen und die doCall Methode überschreiben und den code an den Anfang verschieben.
Browser Klasse:
class myBrowser extends sfBrowser
{
/**
* Calls a request to a uri.
*/
protected function doCall()
{
// manually shutdown user to save current session data
if (isset($this->context) AND $this->context->getUser())
{
$this->context->getUser()->shutdown();
$this->context->getStorage()->shutdown();
}
// recycle our context object
$this->context = $this->getContext(true);
sfConfig::set('sf_test', true);
// we register a fake rendering filter
sfConfig::set('sf_rendering_filter', array('sfFakeRenderingFilter', null));
$this->resetCurrentException();
// dispatch our request
ob_start();
$this->context->getController()->dispatch();
$retval = ob_get_clean();
// append retval to the response content
$this->context->getResponse()->setContent($retval);
}
}
Test code:
include dirname(__FILE__).'/../../bootstrap/functional.php';
$browser = new sfTestFunctional(new myBrowser());
$browser->
get('/site-one');
// override the session data
$browser->getUser()->setAttribute('key', $value);
$browser->
get('/site-one');
In einem neuen symfony Projekt habe ich nun mal doctrine in der kompilierten version getestet. Seit version 1.3.7 von symfony wird dies unterstützt.
http://www.symfony-project.org/blog/2010/09/22/symfony-1-3-7-1-4-7
Dabei habe ich zwei Dinge gelernt
Erstens sollte man die option –driver verwenden. Mit mysql kann man so ~15% der Dateigröße sparen.
Zweitens sollte man Doctrine_Core und nicht Doctrine verwenden, da dies sonst zu fatal errors führt, da die Klasse deprecated ist und nicht mit kompiliert wird.
Um den Klassennamen automatisch zu fixen siehe:
Wechseln von Doctrine to Doctrine_Core mit einem Befehl
Wenn du bestimmt Felder oder Feldgruppen entfernen möchtest, wenn ein Benutzer nicht die dafür erforderlichen Rechte besitzt, musst du folgendes tun:
1. öffne deine action Klasse und füge folgendes ein:
public function preExecute()
{
parent::preExecute();
$this->configuration->setUser($this->getUser());
}
2. öffne die *GeneratorConfiguration Klasse und füge folgendes ein:
protected $user;
public function setUser($user)
{
$this->user = $user;
}
public function getUser()
{
return $this->user;
}
public function getEditDisplay()
{
$fieldsets = parent::getEditDisplay();
if (!$this->getUser()->hasCredential('admin'))
{
unset(
$fieldsets['Auth'][2], // field
$fieldsets['Rights'] // field group
);
}
return $fieldsets;
}
public function getNewDisplay()
{
... // see getEditDisplay
}
public function getFormOptions()
{
return array('user' => $this->getUser());
}
3. zuletzt öffne die *Form Klasse und füge folgendes ein:
public function configure()
{
...
if (!$this->getOption('user')->hasCredential('admin'))
{
unset($this['is_super_admin'], $this['groups_list'], $this['permissions_list']);
}
...
}
Wer seine XML Xliff Dateien gegen die dtd validiert hat oft das Problem, dass die einzelnen trans-unit Nodes keine oder eine bereits existierende id aufweisen. Um dieses Problem zu lösen hab ich mir ein kleines Skript gebaut.
fix_id.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php
$doc = new DOMDocument();
$doc->load($argv[1]);
$xpath = new DOMXPath($doc);
$query = '//trans-unit';
$entries = $xpath->query($query);
foreach ($entries as $i => $entry) {
$entry->setAttribute('id', $i+1);
}
$doc->save($argv[1]); |
Im symfony1 Hauptverzeichnis nun folgenden Befehl absetzen
for FILE in `find apps/*/i18n -name *\.xml`; do php fix_id.php $FILE; done;
Am Montag fand der GTUG Battle Hackathon statt. Das ganze fand bei Google hier in München statt. An welchem Projekt wir gerade arbeiten wird wohl am 15.März verraten. Ich kann schon mal soviel verraten es ich natürlich ein chrome plugin

Google Battle Hackathon 2010
Als erstes das git repository ausschecken
git clone git://github.com/progit/progit.git
Wenn du Ubuntu benutzt musste du ein paar Pakete nachinstallieren
sudo aptitude install ruby pandoc texlive-xetex texlive-latex-recommended
anschließend kannst du das PDF in deiner bevorzugten Sprache erstellen lassen. Führe im latex Verzeichnis folgendes Kommando aus.
Erstelle eine Funktion in deiner BaseForm Klasse
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| public static function listenToPostConfigure($event)
{
$form = $event->getSubject();
$widgetSchema = $form->getWidgetSchema();
$validatorSchema = $form->getValidatorSchema();
$fields = $form->getFormFieldSchema()->getWidget()->getFields();
foreach ($fields as $key => $object)
{
$label = $form->getFormFieldSchema()->offsetGet($key)->renderLabelName();
if (isset($validatorSchema[$key]) and $validatorSchema[$key]->getOption('required') == true)
{
$title = $key . '_field_is_required';
$label .= '<sup>getFormFormatter()->translate($title) . '">*</sup>';
}
$widgetSchema->setLabel($key, $label);
}
} |
Add a listener to the form.post_configure event with your function
1
2
| $dispatcher = $this->getEventDispatcher();
$dispatcher->connect('form.post_configure', array('BaseForm', 'listenToPostConfigure')); |
Einfach folgende Datei in das Verzeichnis netbeans-6.8/nb6.8 entpacken:
SymfonyColorScheme.zip
Danke an Ze Technology für das Farbschema
http://www.ze-technology.com/2009/12/11/netbeans-aux-couleurs-de-symfony/
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 |
Letzte Kommentare