1. Go to this page and download the library: Download ssa/core library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ssa / core example snippets
namespace services\;
/**
* simple example service
*
* @author deblock
*/
class HelloWorld {
/**
* return Hello <yourName> !!
* @param string $yourName
* @return string
*/
public function helloYou($yourName) {
return 'Hello ' . $yourName.' !!';
}
}
class FileService {
/**
* @param file $file
*/
public function upload($file) {
// file is like this
// array(
// 'name' => 'string',
// 'size' => int,
// 'error' => int,
// 'tmp_name' => 'string',
// 'type' => 'string'
// )
}
/**
* @param array(file) $files
*/
public function uploadMultiple($files) {
foreach ($files as $file) {
$this->upload($file);
}
}
}
use ssa\ServiceManager;
// the first way to do this is with registerAllServices method
ServiceManager::getInstance()->registerAllServices(array(
// the first service is the class ssa\test\Service1 and we expose all this method
'service1' => array(
'class' => 'ssa\test\Service1'
),
// the second service is the class ssa\test\Service2 and we expose only the action1 and action2 method
'service2' => array(
'class' => 'ssa\test\Service2',
'methods' => array('action1','action2')
)
));
// the second way to do this is the registerService function, you can only register one service
ServiceManager::getInstance()->registerService('service3','ssa\test\Service3');
// or
ServiceManager::getInstance()->registerService('service4','ssa\test\Service4', array('action1'));
use ssa\Configuration;
Configuration::getInstance()->configure(array(
'debug' => true, // if debug is true the generated javascript file are not minimized
'cacheMode' => 'file', // if the cache is configured this cache mode is use, this can be file,apc,memcache,no(default)
'cacheDirectory' => '', // if the cacheMode is file, this parameter is mandatory, this is the directory where the cache is put
'memcacheHost' => '', // if the cacheMode is memcache is set this parameter is mandatory
'memcachePort' => ''// if the cacheMode is memcache is set this parameter is mandatory
));
// the configuration can be do like this, example
Configuration::getInstance()->setDebug(true);
Configuration::getInstance()->setCacheMode('file');
/** service register **/
/** register services, and configure ssa */
use ssa\runner\resolver\impl\DefaultParameterResolver;
$defaultParameter = DefaultParameterResolver::createDefaultParameterResolver();
$defaultParameter->addObjectResolver(new MyObjectResolver());
$defaultParameter->addPrimitiveResolver(new MyPrimitiveResolver());
use ssa\runner\ServiceRunner;
// get the service and the action : HelloWorld.sayHello
list($service, $action) = explode('.', $_GET['service']);
// create the service runner
$serviceRunner = new ServiceRunner($service, new MyParameterResolver());
// run the action with get parameters
echo $serviceRunner->runAction($action, $_GET);
class Service {
/**
* @Encoder(\MyEncoder)
*
* @param string $firstParameter
*
* @return string
*/
public function action($firstParameter) {
return $firstParameter;
}
}
function __autoload($className) {
if (strpos($className, 'ssa\') == 0) {
$file = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
use ssa\ServiceManager;
use ssa\Configuration;
// configure the ssa framework
Configuration::getInstance()->configure(array(
'debug' => true
));
// registrer your services
ServiceManager::getInstance()->registerAllServices(array(
'HelloWorld' => array('class' => 'ssa\toEndTest\HelloWorld')
));
use ssa\runner\ServiceRunner;
// get the service and the action : HelloWorld.sayHello
list($service, $action) = explode('.', $_GET['service']);
// create the service runner
$serviceRunner = new ServiceRunner($service);
// run the action with get parameters
echo $serviceRunner->runAction($action, array_merge($_POST, $_FILES));
use ssa\converter\JavascriptConverter;
use ssa\converter\SimpleUrlFactory;
// url use to call php services
$url = substr($_SERVER['REQUEST_URI'],0, strrpos($_SERVER['REQUEST_URI'], '/'));
// url factory use for create the service run url (your run.php file)
$factory = new SimpleUrlFactory("http://$_SERVER[HTTP_HOST]$url/run.php?service={action}&test=true");
// create the converter convert the service into Javascript service, service use $_GET parameter
$converter = new JavascriptConverter($_GET['service'], $factory);
echo $converter->convert();
php
use ssa\runner\annotations\RunnerHandler;
use Doctrine\Common\Annotations\Annotation;
/**
*
* @Annotation
*
* @author thomas
*/
class Secure implements RunnerHandler {
/**
* set state magic method for cache method
* @param type $array
* @return \ssa\secure\annotations\Secure
*/
public static function __set_state($array) {
$secure = new Secure();
return $secure;
}
/**
* call before service call
*
* @param string $method the action name
* @param array $inputParameters service parameter, (service => the service call, service.method)
* @param ServiceMetadata $metaData
*
* @throw Exception if action must no be call
*/
public function before($method,array &$inputParameters,ServiceMetadata $metaData) {
}
/**
* call before service call
*
* @param string $method the action name
* @param array $inputParameters service parameter, (service => the service call, service.method)
* @param mixed the service result before encoding
* @param ServiceMetadata $metaData
*
* can return value tranformed $result, encoder is call after this method
*/
public function after($method,array &$inputParameters, $result, ServiceMetadata $metaData) {
}
}