Zum Inhalt

Benutzerdefinierte API-Aufrufe

Sie können das Contentfly CMS jederzeit um benutzerdefinierte Schnittstellen (API-Aufrufe) ergänzen.

Controller anlegen

Benutzerdefinierte Controller, die die Logik für die eigene Schnittstelle beinhaltet, sind im Ordner custom/Controller abzulegen und von Areanet\PIM\Classes\Controller\BaseController abzuleiten.

custom/Controller/TestController.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
namespace Custom\Controller;

use Areanet\PIM\Classes\Controller\BaseController;

class TestController extends BaseController
{
    public function testAction(){
        $data = array();

        return new JSONResponse($data);
    }

    public function secureAction(){
        $data = array();

        return new JSONResponse($data);
    }

    public function hallo($name){
        $data = array('welcomeMessage', "Hallo $name");

        return new JSONResponse($data);
    }
}

Controller einbinden

Route-Manager

Der benutzerdefinierte Controller muss noch mit entsprechenden URL-Routen verknüpft werden, um diesen auch von "außen" erreichbar zu machen. Dies wird über den Areanet\PIM\Classes\Manager\RouteManager erreicht, der über $app['routeManager'] angesprochen werden kann.

Über den Befehl mount wird der benutzerdefinierte Controller mit der Basis-Route custom verknüpft und kann über CustomControllerProvider weiter konfiguriert werden.

custom/app.php

1
2
<?php
$controllerProvider = $app['routeManager']->mount('custom', 'Custom\Controller\TestController');

mount($baseRoute, $controller)

Parameter Typ Optional Beschreibung
$baseRoute String nein Name der Basis-Route. Alle weiteren Aufrufe sind dann unter www.domain.de/BASIS_ROUTE/* erreichbar
$controller Areanet\PIM\Classes\Controller\BaseController nein
  • Rückgabe: Areanet\PIM\Classes\Controller\Provider\Base\CustomControllerProvider

Basis-Route

Im obigen Beispiel sind alle im Controller aufgerufenen Aktionen über die Basis-URL www.domain.de/custom erreichbar.

Beachten Sie, dass alle aufrufbaren Aktionen im Controller aber über die folgenden Schritten noch manuell konfiguriert werden müssen!

Die Basis-Route $baseRoute muss eindeutig sein!

Controller-Provider

Über den Controller-Provider können die einzelnen URL-Routen zu den Aktionen im Controller konfiguriert werden.

get($route, $isSecure = false, $action_name = null)

Hinzufügen einer URL-Route über HTTP-GET.

Parameter Typ Optional Beschreibung
$route String nein URL-Route 'routename' wird automatisch auf die Methode 'routenameAction' im Contoller gemappt, wenn keine dritter Parameter action_name angegeben ist.
$isSecure Boolean ja
$action_name String ja anstatt automatischem Mapping wird die URL-Route auf die hier angegebene Methode im Controller gemappt.
  • Rückgabe/Fluent Interface: Areanet\PIM\Classes\Controller\Provider\Base\CustomControllerProvider
1
2
3
4
<?php
$controllerProvider->get('secure', true);
// Ohne weitere Parameter wird automatisch die Methode _secureAction_
// in Ihrem benutzerdefinierten Controller aufgerufen.

post($route, $isSecure = false, $action_name = null)

Hinzufügen einer URL-Route über HTTP-POST.

Parameter Typ Optional Beschreibung
$route String nein URL-Route 'routename' wird automatisch auf die Methode 'routenameAction' im Contoller gemappt, wenn keine dritter Parameter action_name angegeben ist.
$isSecure Boolean ja
$action_name String ja anstatt automatischem Mapping wird die URL-Route auf die hier angegebene Methode im Controller gemappt.
  • Rückgabe/Fluent Interface: Areanet\PIM\Classes\Controller\Provider\Base\CustomControllerProvider
1
2
<?php
$controllerProvider->post('test', true);

match($route, $isSecure = false, $action_name = null)

Hinzufügen einer URL-Route über HTTP-POST und HTTP-GET.

Parameter Typ Optional Beschreibung
$route String nein URL-Route 'routename' wird automatisch auf die Methode 'routenameAction' im Contoller gemappt, wenn keine dritter Parameter action_name angegeben ist.
$isSecure Boolean ja
$action_name String ja anstatt automatischem Mapping wird die URL-Route auf die hier angegebene Methode im Controller gemappt.
  • Rückgabe/Fluent Interface: Areanet\PIM\Classes\Controller\Provider\Base\CustomControllerProvider
1
2
<?php
$controllerProvider->match('test', true);

Beispiele

custom/app.php

1
2
3
4
5
<?php
$app['routeManager']->mount('custom', 'Custom\Controller\TestController')
    ->get('secure', true)
    ->get('test', false)
    ->get('hallo/{name}', false, 'hallo');

Die benutzerdefinierte Schnittstellen sind damit wie folgt zu erreichen:

  • www.domain.de/custom/secure mit gesetztem APPCMS-TOKEN Header-Token
  • www.domain.de/custom/test
  • www.domain.de/hallo/peter

Silex URL-Routing

Weitere Informationen zum Routing unter Silex URL-Routing

Zugriff auf Systemfunktionen

Innerhalb Ihrer benutzerdefinierten Controller können Sie über Dependency Injection auf verschiedene Systemkomponenten und -funktionen zugreifen.

Silex-Application

1
2
3
4
5
<?php

function controllerAction(){
    $app = $this->app; // Silex\Application
}

Doctrine-ORM

1
2
3
4
5
6
7
8
<?php

function controllerAction(){
    $em = $this->app['orm.em']; // Doctrine\ORM\EntityManager

    $categories = $em->getRepository('Custom\Entity\Category')->findBy(array('isDeleted' => false), array('sorting'=>'asc'));
    $questions  = $em->getRepository('Custom\Entity\Question')->findBy(array('isDeleted' => false), array('sorting'=>'asc'));
}

Doctrine-DBAL

1
2
3
4
5
<?php

function controllerAction(){
    $dbal = $this->app['database']; // Doctrine\DBAL\Connection
}

Eingeloggter Benutzer

1
2
3
4
5
<?php

function controllerAction(){
    $user = $this->app['auth.user']; // Doctrine\ORM\EntityManager
}

Hilfsfunktionen

1
2
3
4
5
<?php

function controllerAction(){
    $helper = $this->app['helper']; // Areanet\PIM\Classes\Helper
}

Die Helper-Klasse stellt derzeit lediglich eine Methode zur Verfügung.

getFullEntityName($shortName)

Gibt aus der Kurzschreibweise (z.B. Produkt oder PIM\User) den kompletten Pfad zurück (z.B. Custom\Entity\Produkt oder Areanet\PIM\Entity\User)

Parameter Typ Optional Beschreibung
$shortName String nein Kurzschreibweise des Entitäten-Namen.
  • Rückgabe: String