CommandResolver
[ class tree: CommandResolver ] [ index: CommandResolver ] [ all elements ]

Source for file FileSystemCommandResolver.php

Documentation is available at FileSystemCommandResolver.php

  1. <?php
  2. /**
  3.  * MVClasses
  4.  *
  5.  * LICENSE
  6.  *
  7.  * "THE BEER-WARE LICENSE" (Revision 42):
  8.  * "Sven Strittmatter" <ausserirdisch@sven-space.de> wrote this file.
  9.  * As long as you retain this notice you can do whatever you want with
  10.  * this stuff. If we meet some day, and you think this stuff is worth it,
  11.  * you can buy me a beer in return.
  12.  *
  13.  * @category    MVClasses
  14.  * @package     CommandResolver
  15.  * @copyright   Copyright (c) 2007 Sven Strittmatter
  16.  */
  17.  
  18. /**
  19.  * @see CommandResolver
  20.  */
  21. require dirname(__FILE__)."/CommandResolver.php";
  22.  
  23. /**
  24.  * Ein CommandResolver welcher anhand von Dateinamen aufloest.
  25.  *
  26.  * Der FileSystemCommandResolver extrahiert aus dem Request-Objekt
  27.  * den Command-Namen. Dieser muss dem dem Request-Objekt als Parameter
  28.  * bekannt sein. Aus diesem Command-namen erzeugt der Resolver
  29.  * den Dateinamen der Command-Klasse, inkludiert diese und liefert
  30.  * eine Instanz dieser Klasse zurueck.
  31.  *
  32.  * @category    MVClasses
  33.  * @package     CommandResolver
  34.  * @copyright     Copyright (c) 2007 Sven Strittmatter
  35.  * @author    "Sven Strittmatter" <ausserirdisch@sven-space.de>
  36.  * @version     1.0
  37.  * @link    http://www.sven-space.de/code/php/MVClasses
  38.  */
  39. class FileSystemCommandResolver implements CommandResolver {
  40.     /**
  41.      * Der Pfad zu dem Verzeichnis in dem sich die
  42.      * Command-Klassen liegen.
  43.      *
  44.      * @access    private
  45.      * @var        string 
  46.      */
  47.     private $_path;
  48.     /**
  49.      * Speichert das Default-Command das zur�ckgegeben
  50.      * wird falls kein passendes Comamnd-Objekt ermittelt
  51.      * werden konnnte.
  52.      *
  53.      * @access     private
  54.      * @var        string 
  55.      */
  56.     private $_default;
  57.  
  58.     /**
  59.      * Konstruktor
  60.      *
  61.      * @access     public
  62.      * @param    string    $path        Pfad zu den Comamnd-Klassen
  63.      * @param    string    $default    Name des Default-Commands
  64.      */
  65.     public function __construct($path$default{
  66.         $this->_path $path;
  67.         $this->_default $default;
  68.     }
  69.  
  70.     /**
  71.      * Ermittelt anhand des uebergebenen Request-Objektes
  72.      * das passende Command-Objekt und liefert es zurueck.
  73.      * Dazu muss dass Requestobjekt den parameter "cmd" mit
  74.      * dem Command-namen bereitstellen. Ist diese Parameter
  75.      * nicht verfuegbar wird das Default-Command zurueck-
  76.      * geliefert. Konnte kein Comamnd-Objekt erzeugt werden
  77.      * wird null zurueckgegeben.
  78.      *
  79.      * @access     public
  80.      * @param    Request $r 
  81.      * @return    Command 
  82.      */
  83.     public function getCommand(Request $r{
  84.         try {
  85.             if ($r->issetParameter("cmd")) {
  86.                 $command $this->_loadCommand($r->getParameter("cmd"));
  87.             else {
  88.                 $command $this->_loadCommand($this->_default);
  89.             }
  90.  
  91.             if ($command instanceof Command{
  92.                 return $command;
  93.             else {
  94.                 return null;
  95.             }
  96.         catch (Exception $e{
  97.             return null;
  98.         }
  99.     }
  100.  
  101.     /**
  102.      * Laedt eine Command-Klasse anhand des Command-Namen
  103.      * und gibt eine Instanz der Klasse zurueck. Die Command-
  104.      * Klasse muss den Namen "{$name}Command" besitzen und die
  105.      * Datei muss den Namen "{$name}Command.php" tragen.
  106.      *
  107.      * Falls die Datei nicht geoeffnet werden kann oder die Klasse
  108.      * nicht geladen werden kann wird eine Exception geworfen.
  109.      *
  110.      * @throws     Exception
  111.      * @access    protected
  112.      * @param    string    $name 
  113.      * @return    Object 
  114.      */
  115.     protected function _loadCommand($name{
  116.         $name $name."Command";
  117.  
  118.         if (!class_exists($namefalse)) {
  119.             $file "{$this->_path}/{$name}.php";
  120.  
  121.             if (!file_exists($file)) {
  122.                 throw new Exception("File not found: $file!");
  123.             }
  124.  
  125.             include_once $file;
  126.  
  127.             if (!class_exists($name, false)) {
  128.                 throw new Exception("Class not exists: $name!");
  129.             }
  130.         }
  131.  
  132.         return new $name();
  133.     }

Documentation generated on Sun, 02 Aug 2009 17:14:56 +0200 by phpDocumentor 1.4.2