Alle Beiträge von toocan

dirty, but sexy – hyphenated properties in SOAP response object in PHP

Ich habe hier gerade einen Service am Wickel, der mir in meine Response Objekte mit Minus getrennte Variablen (hyphenated properties) zaubert. Man kann nun mit lustigen Konstrukten darauf zurgreifen –

$responseObject->{'hyphenated-property'};

muss man aber nicht. Ich persönlich finde das nicht nur sehr nervig…

Somit kleiner magischer Hack und alle sind wieder zufrieden.
Alle Objekte der classmap leiten jetzt hiervon ab und gut.


class camelCaseProperties {
    public function __set($key, $value) {
        $this->{preg_replace_callback("/-\w/",create_function('$a', 'return strtoupper($a[0][1]);'),$key)} = $value;
    }
}

Man könnte das nun auch wieder im Konstruktor der Klassen machen und die jeweiligen Eigenschaften umbauen lassen oder die Getter und Setter bemühen, aber für’ne 2min Lösung find ich das ziehmlich sexy.

Bis später.

ACL im ZF auf Actionebene

Nun, da ich schon einige Male gefragt wurde, wie am besten zu lösen (wobei ich nicht sagen kann, ob dies die beste Lösung ist), poste ich mal ‚unsere‘ Möglichkeit:


[...]
$acl_resources = array();
 foreach ($this->getFrontController()->getControllerDirectory() as $module => $cntrl_path)
 {
    $files = scandir($cntrl_path);
    foreach ($files as $file)
    {
        if (preg_match('/^([\\w]*)Controller\.php$/i',$file,$hits))
        {
          $classPrefix = ($module == 'default') ? '' : ucfirst($module).'_';
          $className = $classPrefix.$hits[1].'Controller';
          require_once($cntrl_path.DIRECTORY_SEPARATOR.$file);
          if (class_exists($className))
          {
            $refl_class = new ReflectionClass($className);
            foreach ($refl_class->getMethods() as $refl_method)
            {
                if (preg_match('/^([\\w]*)Action$/i',(string) $refl_method->getName(),$matches))
                {
                    $acl_resources[$refl_method->getDeclaringClass()->getName()][] = array(
                                                                                           'action'         => $matches[0],
                                                                                           'action_short'   => strtolower($matches[1])
                                                                                           );
                }
            }
          }
        }
    }
}
[...]

Wenn’s gefällt, viel Spass – ansonsten bin ich über Kommentare/ Kritik sehr erfreut.

Gruß tucci