hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Travis CI: No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

Bei der sehr kryptischen Fehlermeldung in Travis CI:

No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

handlet es sich um ein Problem mit falschen Einrückungen im travis.yml File:

matrix:
  include:
    - php: 5.6
      env:
        - SYMFONY_VERSION='3.4.*'

Ein Leerzeichen zu wenig in der Zeile – SYMFONY_VERSION=’3.4.*’ und es kommt zu diesem wenig aufschlussreichen Fehler.

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

GitHub Continuous Integration und CodeCoverage mit Travis CI

Für mein öffentliches GitHub Projekt Entity to Rest Bundle für Symfony, habe ich Travis CI, ein Service einer Frima aus Berlin/Friedrichshain, für Continuous Integration benutzt und bin vollbegeistert. Ich musste nur eine .travis.yml erstellen und mich mit meinem Github Account kostenlos anmelden und mit wenigen Handgriffen kann ich jetzt mittels Travis CI:

  • Testen von unterschiedlichen PHP-Versionen
  • Testen von unterschiedlichen Symfony Versionen
  • Markup auf GitHub über den Stand der Tests: Build:success/failed
  • automatische E-Mail Benachrichtigung über das Ergebnis nach jedem Pull-Request

Jetzt erscheint eine schicke Grafik und informiert über den aktuellen Build Status:

travis_github_ci

Das Ergebnis des Builds kann man sich anschauen auf der travis ci Webseite.

Hinweis: Für öffentliche GitHub Repositories ist der Service kostenlos, für private Repositories muss man bezahlen.

Um die CodeCoverage auch anzeigen und berechnen zu können, kann man sich kostenlos bei einem der beiden Anbieter anmelden und muss nur die CodeCoverage Generierung in seiner .travis.yml triggern.

https://codecov.io  Beispiel Projekt

https://coveralls.io Beispiel Projekt

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Symfony Entity to REST API Bundle released

Bei meinem jetztigen Projekt programmiere ich gerade mit Symfony 3 eine REST API und habe aus verschiedenen Bundlen eine REST Suite erstellt für Symfony 3 erstellt, welche folgende  Komponenten enthält:

  • Api Dokumentation inkl Sandbox Tests – auch ohne Programmierkenntnisse kann der Code abgenommen werden und ausprobiert werden
  • die Dokumentation wird automatisch generiert aus den Eigenschaften der Entitäten, es ist kein zusätzlicher Aufwand notwendig
  • die Validierung der Parameter wird automatisch anhand der Entitäten durchgeführt, es ist kein zusätzlicher Aufwand notwendig
  • eine Suche ist automatisch enthalten, die Relationen von Entitäten sind auch durchsuchbar
  • CRUD Funktionalität: GET, CREATE, UPDATE, DELETE einer Entität ist schon implementiert und kann erweitert werden
  • einfaches Testing: Integration Tests sind schnell erstellbar / Vorlagen liegen bereit
  • ein Demo REST Service Projekt mit Demo Code ist bereit
  • ausführliche Dokumentation
  • einfache Installation über composer: composer require sebvie/rest-suite-bundle

Bei Interesse kann ich gern das Bundle in ihrem Projekt integrieren oder einarbeiten: Kontakt.

 

 

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

PHP: Parse Error: syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘

Bei der sehr kryptischen  Fehlermeldung

Parse Error: syntax error, unexpected ':', expecting ';' or '{'

handelt es sich in den meisten Fällen um eine PHP7 Inkompatibilität.

Der auszuführende Code enthält ein Sprach-Feature, was erst unter PHP7 verfügbar ist:

Return Type Definitions (Definition des Rückgabewertes). Beispiel:

function myFuntion($input): array
{
    return ['foo'];
}

Damit kann man festelegen, dass die Funktion ein Array zurückgeben muss, sonst wird ein TypeErrror ausgelöst.

Um den Code in einer niedrigeren PHP Version zum Laufen zu bringen, muss man die Return Type Definition entfernen:

function myFuntion($input)
{
    return ['foo'];
}

Spezialfall: composer weiterlesen…

hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

Symfony static laden von Fixtures beim Laden eines Integration Tests in PHPUnit

Mit der statischen Funktion setUpBeforeClass() von PHPunit kann man einmalig vor dem durchführen der Tests  in einer Klasse Fixtures laden und die Datenbank zurücksetzen:

class MyTestCase extends WebTestCase
{
    use FixtureLoadTrait;
 /**
 * @return void
 */
 public static function setUpBeforeClass()
 {

     $fixtures = [
         new TriggerConditionFixture()
     ];
     self::rebuildDataBase($fixtures);
 }

Die Fixtures lassen sich bequem mit dem Trait laden und die Datenbank wird geleert:

<?php

namespace Tests\Integration;

use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
use Tests\Fixture\BackendBundle\DataFixtures\ORM\LoginFixture;

trait FixtureLoadTrait
{

    /**
     * @param array $fixtures
     *
     * @return void
     */
    protected static function rebuildDataBase(array $fixtures)
    {
        self::bootKernel();
        $fixtureLoader = new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
        foreach($fixtures as $fixture){
            $fixtureLoader->addFixture($fixture);
        }
        $fixtureLoader->addFixture(new LoginFixture());
        self::getFixtureExecutor()->execute($fixtureLoader->getFixtures());
    }

    /**
     * @return ORMExecutor
     */
    protected static function getFixtureExecutor()
    {
        /** @var \Doctrine\ORM\EntityManager $entityManager */
        $entityManager = self::$kernel->getContainer()
            ->get('doctrine')
            ->getManager();

        return new ORMExecutor(
            $entityManager,
            new ORMPurger($entityManager, ['user'])
        );
    }

    /**
     * @return ContainerAwareLoader
     */
    protected static function getFixtureLoader()
    {
        return new ContainerAwareLoader(
            self::$kernel->getContainer()
        );
    }
}
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

PHPStorm Replace Regex über mehrere Zeilen

Um in PHPStorm einen Regex über mehrere Zeieln zu schreiben, kann man folgenden Beispiel Regex verwenden:

\n.+ \* .*statusCodes([^}])+.+

Durch die Verneinung: ([^}])+ werden alle Zeilen bis zur nächsten schließenden Klammer verwendet durch den Regex.

Einen Text, der komplett matchen wäre ist (markiert sind die Elemente aus dem Regex):

       *    statusCodes={
     *          200="Returned on %Entity% get",
     *          400="Returned when the parameters are wrong",
     *          404="Returned when %Entity% not found",
     *          405="Returned when method is wrong (GET|POST|PUT|..)",
     *          500="Returned when a exception is thrown"
     *    }

Eine andere Möglichkeit für mehrzeilige PHP Kommentare (/** */) ist dieser Regex:

.*\/\*[^\/]+\/\s
hard mistakes - please write a commentsome mistakesokgoodvery good
Loading ... Loading ...

PHP Queue Systeme im Vergleich

Ein Vergleich verschiedener Queue Systeme für den Einsatz in einer PHP Applikation.

Apache ActiveMQ

Das Apache Projekt ActiveMQ bietet:

  • realtiv wenig Clients in verschiedenen Sprachen Java, C, C++, C#, Ruby, Perl, Python, PHP
  • die Kommunikation von PHP mit ActiveMQ erfolgt über das Stomp Protocoll
  • einen Stomp/ActiveMQ Client bietet stomp-php
  • Enterprise Einsatz möglich
  • Apache Projekt – Weiterentwicklung ist sicher
  • Open Source
  • eher veraltet

RabbitMQ

RabbitMQ ist ein modernes, weit verbreitetes Queue System.

  • große Auswahl an Clients
  • für PHP ist der php-amqplib Client am weitesten verbreitet
  • einfacher und moderner zu handeln
  • sehr gute Dokumentation
  • Enterprise Einsatz möglich
  • Open Source

Apache Kafka

Apache Kafka ist das modernste Queue System, die Besonderheit

  • extrem performant durch den Einsatz von Streams
  • PHP Clients vorhanden: php-rdkafka
  • Enterprise Einsatz möglich
  • sehr gute Dokumentation
  • Apache Projekt – Weiterentwicklung ist sicher
  • Open Source

Fazit:

Aufgrund des einfachen Handlings würde ich für die meisten Aufgaben RabbitMQ empfehlen. Für Performance kritische Anwendungsfälle ist Apache Kafka am besten geeignet.

Eine Übersicht über weitere Messaging Queues findet man auf Wikipedia.