getRoutes('web'); $menu=''; $body=''; // Tris des routes function sortRoutes($a, $b){ return strnatcmp($a['api'], $b['api']); } usort($routes, 'sortRoutes'); function GenerateLinks($key,$apiArray){ $l=''; if (array_key_exists($key,$apiArray) && count($apiArray[$key])){ foreach ($apiArray[$key] as $api){ preg_match_all('/\w+/', $api['url'], $matches); $link=$apiArray['api'].'-'.implode('-',$matches[0]); $urlText=empty($api['url'])?'/':$api['url']; $l.=''.$urlText.''; } } return $l; } function isSeqArray(array $array) { return !count(array_filter(array_keys($array), 'is_string')) > 0; } function decodeJSONParam($params,$spacer=false,$isSequentialArray=false){ $t=''; foreach($params as $k=>$v){ if(!is_array($v)){ if(strpos($v,'[REQUIRED]')!==false) $v=str_ireplace('[REQUIRED]','REQUIRED',$v); if(strpos($k,'!COMMENT!')!==false) $t.='
// '.$v.'
'; else $t.='
'.$k.' : '.$v.'
'; } else { $delimiterIn='{'; $delimiterOut='},'; $isSeq=false; if(isSeqArray($v)){ $delimiterIn='['; $delimiterOut='],'; $isSeq=true; } $key=''.$k.' : '; if($isSequentialArray) $key=''; $t.='
'.$key.' '.$delimiterIn.decodeJSONParam($v,true,$isSeq).$delimiterOut.'
'; } } return $t; } function GenerateAnApiDoc($key,$apiArray){ $t=''; if (array_key_exists($key,$apiArray) && count($apiArray[$key])){ $t.='

'.$key.'

'; foreach ($apiArray[$key] as $api){ preg_match_all('/\w+/', $api['url'], $matches); $link=$apiArray['api'].'-'.implode('-',$matches[0]); $t.='

'.$apiArray['api'].'/'.$api['url'].'

'; // description principale if(array_key_exists('desc',$api)){ $t.='

'.$api['desc'].'

'; } // paramètre de chemin if (array_key_exists('params',$api) && count($api['params'])){ $t.='

Paramètre du chemin

'; $t.='
Paramètre
Format (PCRE regex)
Description
'; foreach ($api['params'] as $pathparam=>$pathRgx){ $desc=''; if(array_key_exists('params_desc',$api) && array_key_exists($pathparam,$api['params_desc'])) $desc='
'.$api['params_desc'][$pathparam].'
'; $t.='
'.$pathparam.'
'.$pathRgx.'
'.$desc.'
'; } } // paramètre d'URL if ($key==='get' && array_key_exists('get_params',$api) && count($api['get_params'])){ $t.='

Paramètre d\'URL

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['get_params'] as $paramAlias=>$paramRgx){ $desc=''; if(array_key_exists('get_params_desc',$api) && array_key_exists($paramAlias,$api['get_params_desc'])) $desc='
'.$api['get_params_desc'][$paramAlias].'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre optionnels d'URL if ($key==='get' && array_key_exists('opt_get_params',$api) && count($api['opt_get_params'])){ $t.='

Paramètre optionnels d\'URL

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['opt_get_params'] as $paramAlias=>$paramRgx){ $desc=''; if(array_key_exists('get_params_desc',$api) && array_key_exists($paramAlias,$api['get_params_desc'])) $desc='
'.$api['get_params_desc'][$paramAlias].'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre de POST, PATCH et DELETE if (($key==='post' || $key==='patch' || $key==='delete') && array_key_exists('post_params',$api) && count($api['post_params'])){ $t.='

Paramètres

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['post_params'] as $paramAlias=>$paramRgx){ $desc=''; if($paramRgx!=='JSON' && array_key_exists('post_params_desc',$api) && array_key_exists($paramAlias,$api['post_params_desc'])){ $desc='
'.$api['post_params_desc'][$paramAlias].'
'; if(strpos($desc,'[REQUIRED]')!==false) $desc=str_ireplace('[REQUIRED]','REQUIRED',$desc); } if($paramRgx==='JSON') $desc='
'.decodeJSONParam($api['post_params_desc'][$paramAlias]).'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } // paramètre optionnels de POST ET PATCH if (($key==='post' || $key==='patch' /* || $key==='delete' */) && array_key_exists('opt_post_params',$api) && count($api['opt_post_params'])){ $t.='

Paramètres optionnels

'; $t.='
Nom du paramètre
Format (PCRE regex ou JSON(string))
Description
'; foreach ($api['opt_post_params'] as $paramAlias=>$paramRgx){ $desc=''; if($paramRgx!=='JSON' && array_key_exists('post_params_desc',$api) && array_key_exists($paramAlias,$api['post_params_desc'])) $desc='
'.$api['post_params_desc'][$paramAlias].'
'; if($paramRgx==='JSON') $desc='
'.decodeJSONParam($api['post_params_desc'][$paramAlias]).'
'; $t.='
'.$paramAlias.'
'.$paramRgx.'
'.$desc.'
'; } } } } return $t; } if(is_array($routes)){ foreach ($routes as $api){ $get=GenerateLinks('get',$api); $post=GenerateLinks('post',$api); $patch=GenerateLinks('patch',$api); $delete=GenerateLinks('delete',$api); $menu.=' '.$api['api'].'/ '; $body.='

'.$api['api'].'

'; $body.=GenerateAnApiDoc('get',$api); $body.=GenerateAnApiDoc('post',$api); $body.=GenerateAnApiDoc('patch',$api); $body.=GenerateAnApiDoc('delete',$api); $body.='
'; } } $html=' API ROUTES

API

Routes disponibles

Syntax d\'un fichier route

Le fichier route doit être nommé web.routes.php et doit être placé à la racine du controlleur concerné.

'; $html.="
Voir la syntaxe
return  [
        // nom de l'API et préfixe de l'URL, est unique au système
        'api'=>'apiname'
        // namespace de la classe publique
        ,'class'=>'public\\class\\namespace'
        // Les possibles restrictions d'accès au groupe de route (FACULTATIF). Tous les routes de tous les types seront restreint par les accès utilisateur
        // Restrictions possibles : 
        // - sys_admin : administrateur système
        // - admin : administrateur client
        ,'restrictions'=>['sys_admin','admin']
        // Les routes GET (pour l'obtention de donnée)
        ,'get'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // paramètres requis de l'URL (ie mon/url?param=paramvalue)
                ,'get_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // paramètres facultatifs de l'URL
                ,'opt_get_params'=>[
                    'param2' =>'[PCRE REGEX]'
                ]
                // description des paramètres de l'URL
                ,'get_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                ]
            ],
        ]
        // Les routes POST (pour la création d'éléments uniquement)
        ,'post'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du POST
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX ou \"JSON\"]',
                    'jsonex' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // Paramètres optionnels du POST
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX ou \"JSON\"]'
                ]
                // description des paramètres du POST
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2',
                    'jsonex' =>'Un tableau PHP représentant l\'objet JSON',
                ]
            ],
        ]
        // Les routes PATCH (pour la mise à jour d'éléments uniquement)
        ,'patch'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du PATCH
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // Paramètres optionnels du PATCH
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX ou \"JSON\"]'
                    'jsonex' =>'[PCRE REGEX ou \"JSON\"]',
                ]
                // description des paramètres du PATCH
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                    'jsonex' =>'Un tableau PHP représentant l\'objet JSON',
                ]
            ],
        ]
        // Les routes DELETE (pour la suppression d'éléments uniquement)
        ,'delete'=>[
            [
                // Description de la route
                'desc'=>'La description détaillée de la route',
                // Les possibles restrictions d'accès à la route (FACULTATIF). La route sera restreinte par les accès utilisateur
                // Restrictions possibles : 
                // - sys_admin : administrateur système
                // - admin : administrateur client
                ,'restrictions'=>['sys_admin','admin']
                // Reste de l'URL
                'url'=>'{dynamicparam}/path/to/something'
                // méthode de la classe publique que ça atteindra
                ,'method'=>'methodName'
                // paramètres dynamiques du path de l'URL, et l'expression régulière de contrôle du paramètre
                ,'params'=>[
                    'dynamicparam' =>'[PCRE REGEX]',
                ]
                // description des paramètres dynamiques du path de l'URL
                ,'params_desc'=>[
                    'dynamicparam' =>'Un paramètre dynamique'
                ]
                // Paramètre du DELETE
                ,'post_params'=>[
                    'param' =>'[PCRE REGEX]'
                ]
                // Paramètres optionnels du DELETE
                ,'opt_post_params'=>[
                    'param2' =>'[PCRE REGEX]'
                ]
                // description des paramètres du DELETE
                ,'post_params_desc'=>[
                    'param' =>'description de param',
                    'param2' =>'description de param2'
                ]
            ],
        ]
    ];
"; $html.='
'.$body.'
'; echo $html;