/**
  * Gibt True zurück wenn der Service den ServiceRequest erfolgreich bearbeiten kann
  *
  * @todo "erfolgreich" definieren
  * @return bool
  */
 public function isResponsibleFor(ServiceRequest $request)
 {
     /*
       hier könnte man mal den request hashen, dann den controller suchen und zu dem hash speichern
       dann könnte man den controller bei route() direkt aufrufen
     */
     $this->log('überprüfe ob verantwortlich für: ' . $request->debug());
     try {
         return $this->doResponsibleFor($request);
     } catch (\Psc\CMS\Service\ControllerRouteException $e) {
         $this->log('fail: ' . $e->getMessage());
     } catch (\Psc\Net\HTTP\HTTPException $e) {
         $this->log('fail: ' . $e->debug());
     } catch (\Psc\Net\RequestMatchingException $e) {
         $this->log('fail: ' . $e->getMessage());
     }
     return FALSE;
 }
 /**
  * Findet den Controller anhand des Requests
  *
  * unsere StandardStrategie ist hier:
  *   1.Part => Klassenname: $className in <$this->getControllersNamespace()>\\<ucfirst($className)>Controller
  *                oder (nicht implementiert) 1.Part => Schlüssel in $this->controllersMap
  *                oder (whatever)
  *   2.Part => Name der Methode des Controllers
  *   3-x.Part => Parameter zur Methode des Controllers (Reihenfolge wichtig)
  *
  *   die "freien" Parameter des Requests werden auf die freien Parameter der Methode gemappt. Zusätzlich können die Parameter
  *   der Methode noch $requestType|$requestParts|$requestBody|$request sein. Diese werden dann mit den Parametern des Requests gesetzt
  *
  *   GET /person/form/7
  *   PersonController::form = function($id)
  * =>
  *   Project\Controllers\PersonController::form(7)
  *
  *   GET /person/form/7
  *   PersonController::form = function($requestType, $id)
  * =>
  *   Project\Controllers\PersonController::form(Service::GET, 7)
  * 
  *   POST /person/form/7
  *   PersonController::form = function($requestType, $requestBody, $id)
  * =>
  *   Project\Controllers\PersonController::form(Service::POST, array(...), 7)
  * 
  *   GET /person/complex/example/for/request/uri
  *   PersonController::complex = function($requestType, $requestParts)
  * =>
  *   Project\Controllers\PersonController::complex(Service::GET, array('example','for','request','uri'))
  * 
  * @return list(\Psc\CMS\Controller\ServiceController, string, Array)
  */
 public function routeController(ServiceRequest $request)
 {
     $parts = $request->getParts();
     $r = new RequestMatcher($request);
     /* Class */
     $class = $this->getControllerClass($r->matchNES(), $check = TRUE);
     /* Method */
     $method = $r->shift();
     // method ist optional (kann index sein)
     if ($method === NULL) {
         $method = 'index';
     }
     $class->elevateClass();
     if (!$class->hasMethod($method)) {
         throw ControllerRouteException::create("in Methode: %s::%s nicht gefunden", $class->getFQN(), $method);
     }
     /* Params */
     $gMethod = $class->getMethod($method);
     $dynamicParts = $r->getLeftParts();
     // absaven
     $params = array();
     foreach ($gMethod->getParameters() as $param) {
         if ($param->getName() === 'requestBody') {
             $params[] = $request->getBody();
         } elseif ($param->getName() === 'requestType') {
             $params[] = $request->getType();
         } elseif ($param->getName() === 'request') {
             $params[] = $request;
         } elseif ($param->getName() === 'requestParts') {
             $params[] = $dynamicParts;
         } elseif (!$r->isEmpty()) {
             $params[] = $r->shift();
         }
     }
     return array($this->getControllerInstance($class), $method, $params);
 }
 public static function wrongType(ServiceRequest $request)
 {
     return new static(sprintf('Invalider Request-Type: ' . $request->getType()));
 }
 /**
  * @depends testConstruct
  */
 public function testCreate($expectedServiceRequest)
 {
     $serviceRequest = ServiceRequest::create(Service::GET, array('episodes', '8', 'form'), 'myBody');
     $this->assertEquals($expectedServiceRequest, $serviceRequest);
 }
Exemple #5
0
 public function __construct(ServiceRequest $request)
 {
     $this->request = $request;
     $this->parts = (array) $request->getParts();
 }