• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

$_SERVER['HTTP_USER_AGENT'] -> dynamisch testen mit Unit-Tests?

Wegen Problemen mit Smartphones auf meiner Website, blende ich einen Hinweis ein. Das Funktioniert auch sehr gut.

Bloß wie kann ich die verschiedenen User-Agents testen?

Meine Methode in der bootstrap:
PHP:
    protected function _initInfoMobilePhones()
    {
      if (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone')
          || strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')
          || strstr($_SERVER['HTTP_USER_AGENT'], 'iPod')
          || strstr($_SERVER['HTTP_USER_AGENT'], 'Android')
          || strstr($_SERVER['HTTP_USER_AGENT'], 'BlackBerry'))
      {
        echo 'STOP Smartphone';
      }
    }
Ich wollte es mit den Unit-Tests wie folgt testen:
PHP:
    public function testInfoMobilePhonesIPhone()
    {
      $_SERVER['HTTP_USER_AGENT'] = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3";

      $this->dispatch('/');

      $this->assertModule('test');
      $this->assertController('test');
      $this->assertAction('test');
    }
Aber leider wird dann der HTTP_USER_AGENT nicht an die Bootstrap-Klasse übergeben, so dass ich dann immer einen leeren String erhalte.

Wenn ich den User-Agent-String in die Startklasse von Bootstrap mache, dann ist diese Variable auch in der Bootstrap verfügbar. Ansonsten nicht.

Hat jemand eine Idee, wie ich das trotzdem für jeden einzelnen Zweig testen könnte?
 

st0ffel

New member
Du könntest den Check, ob es sich um ein mobiles Endgerät handelt, in eine Hilfsklasse auslagern. Diese kannst Du dann einfacher, schneller und besser testen.
 
Ich hätte es auch gerne in ein Plugin ausgelagert. Leider habe ich das Problem, dass ich meine Seiten cache. Dies habe ich in der Bootstrap.

Deswegen muss ich dies vor dem Aufruf der Cache-Funktion machen.
 

crash

New member
Wie soll denn der Cache die richtige Seite cachen wenn gar nicht geroutet wurde? Sowas gehört ebenfalls nicht in die Bootstrap, sondern in ein FrontController-Plugin. Ansonsten sei an dieser Stelle ein Reverse-Proxy, wie z.B. Varnish, empfohlen.
 
An diesen Ansatz habe ich nicht gedacht. Aber das werde ich dann mal probieren umzubauen. In welche route-Methode würdet ihr die Cache-Funktion nehmen?

Es kann eigentlich nur routeStartup() sein?
 

crash

New member
Z.B. Dann einfach die Inhalte holen, isDispatched auf True setzen und den Inhalt in das Response-Objekt schreiben. Aber wie gesagt ein Reverse-Proxy wäre besser, der hat nicht jenen Overhead und lässt sich fein graduell einstellen.
 
Ich cache die gesamte Seite.

Warum sollte ich im Plugin auf isDispatchted auf True setzen. Die restlichen Plugins und Actions werden nicht aufgerufen.

Hast du ein Beispiel für Reverse-Proxy?
 
Oben