Kohana 2.3 NGINX htaccess like URL rewrite

Um Kohana 2.3 auf NGINX mit sauberen URLs zu konfigurieren geht folgende NGINX server config:

server {
        server_name example.com www.example.com;
        listen   80;

        root /srv/www/example.com/pages/;
        access_log /srv/www/example.com/logs/access.log;
        error_log /srv/www/example.com/logs/error.log;

        index index.php index.html index.htm;

        try_files $uri $uri/ @rewrite;

        location @rewrite {
                rewrite ^/(.*)$ /index.php/$1;
        }

        location ~ \.php {
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;

                include fastcgi_params;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param ENV "production";
        }
}

SQL General error – 1553 Cannot drop index XYZ needed in a foreign key constraint

// show indexes of table
SHOW CREATE TABLE news;

// shows something like this
...
CONSTRAINT `FK_3A51546D12469DE2` FOREIGN KEY (`category_id`) REFERENCES `news_category` (`id`),
...

// drop index
ALTER TABLE news DROP FOREIGN KEY FK_3A51546D12469DE2;

existentes GIT Repo in einen bestehenden Ordner (mit Dateien) integrieren

Um ein bestehendes GIT Repo in einen bestehenden Ordner, gefüllt mit Dateien, zu integrieren, kann man wie folgt vorgehen:

/~ cd notemptydir/

notemptydir/~ git init
notemptydir/~ git remote add origin PATH/TO/REPO
notemptydir/~ git fetch
notemptydir/~ git checkout -t origin/master

Symfony Sonata ACL – neue Einträge die nicht im Sonata erzeugt werden haben keine Rechte

Um in Symfony Sonata die ACL auch mit Einträgen zu nutzen, die durch ein Frontend oder im Hintergrund erzeugt werden, ohne den Sonatakontext, muss man den ACL Eintrag selbst erstellen. Dazu kann man einen EntityEventListener installieren und im postPersist Event folgendes tun:

    public function postPersist(LifecycleEventArgs $args)
    {
        $this->addAcl($args);
    }

    protected function addAcl(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();

        $adminSecurityHandler = $this->container->get('sonata.admin.security.handler');

        $adminPool  = $this->container->get('sonata.admin.pool');
        $admin      = $adminPool->getAdminByClass(get_class($entity));

        if (null !== $admin) {
            $objectIdentity = ObjectIdentity::fromDomainObject($entity);
            $acl = $adminSecurityHandler->getObjectAcl($objectIdentity);
            if (is_null($acl)) {
                $acl = $adminSecurityHandler->createAcl($objectIdentity);
            }
            $adminSecurityHandler->addObjectClassAces($acl, $adminSecurityHandler->buildSecurityInformation($admin));
            $adminSecurityHandler->updateAcl($acl);
        }
    }

Photoshop High DPI Scaling Problem

Wie schon in vielen Foren beschrieben, wird Photoshop und einige andere Adobe Produkte auf High DPI Bildschirmen nicht korrekt skaliert (mikroskopische Icons und Texte), wärend andere Adobe Produkte wie Lightroom keine Schwierigkeiten mit der korrekten Skalierung haben.

Die generelle Bildschirmauflösung des Gerätes zu ändern, ist keine Option, da dann andere Programme und das OS viel zu groß skalieren.

In meinem Fall ist ein Dell XPS 13 mit WIN8.1 mit einer Auflösung von 3200×1800 Bildpunkten am Start.

Erst nach einigem Suchen fand ich zumindest für Photoshop CC die Lösung in den experimentellen Einstellungen.

Siehe http://claudiamccue.com/2014/09/fixing-the-tiny-photoshop-cc-interface-on-hi-dpi-windows-displays/

CodeIgniter Disallowed Key Characters FIX

Seit dem Google Analytics auch Cookies mit Sonderzeichen im Namen erstellt, springt die CodeIgniter Validierung darauf an und terminiert jeden Request mit der „Disallowed Key Characters“ Meldung.

Der Fix ist denkbar einfach. Man muss den Character (~) der Validierung mitteilen.
Im Beispiel unten in der PregMatch Definition „/^[~a-z0-9:_\/-]+$/i“.

# /system/libraries/Input.php (Zeile 217)

/**
 * Clean Keys
 *
 * This is a helper function. To prevent malicious users
 * from trying to exploit keys we make sure that keys are
 * only named with alpha-numeric text and a few other items.
 *
 * @access	private
 * @param	string
 * @return	string
 */
function _clean_input_keys($str)
{
    if ( ! preg_match("/^[~a-z0-9:_\/-]+$/i", $str))
    {
        exit('Disallowed Key Characters.');
    }

    return $str;
}

Symfony2 Doctrine Table Join ohne Relation

Wer in Doctrine Tabellen joinen möchte ohne das diese durch Entity Relationen definiert sind, kann folgendermaßen vorgehen:


    public function getInvoicesNotInElster()
    {
        $query = $this->em->createQueryBuilder()
            ->select('i')
            ->from('AcmeAppBundle:Invoice', 'i')
            ->leftJoin('AcmeAppBundle:Elster', 'e', 'WITH', 'e.number = i.number_origin')
            ->where('i.cancelled = 0')
            ->andWhere('e.number IS NULL')
            ->getQuery();

        return $query->getResult();
    }