[advancedcontentfilter] Migrate Slim to version 4 to avoid PHP 8.2 deprecation error
- Fix https://github.com/friendica/friendica/issues/13822pull/1462/head
parent
b05a95cc45
commit
a30e9b788c
|
@ -190,7 +190,7 @@ function advancedcontentfilter_module() {}
|
||||||
function advancedcontentfilter_init()
|
function advancedcontentfilter_init()
|
||||||
{
|
{
|
||||||
if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'api') {
|
if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'api') {
|
||||||
$slim = new \Slim\App();
|
$slim = \Slim\Factory\AppFactory::create();
|
||||||
|
|
||||||
require __DIR__ . '/src/middlewares.php';
|
require __DIR__ . '/src/middlewares.php';
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ function advancedcontentfilter_build_fields($data)
|
||||||
* API
|
* API
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function advancedcontentfilter_get_rules()
|
function advancedcontentfilter_get_rules(ServerRequestInterface $request, ResponseInterface $response)
|
||||||
{
|
{
|
||||||
if (!DI::userSession()->getLocalUserId()) {
|
if (!DI::userSession()->getLocalUserId()) {
|
||||||
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
|
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
|
||||||
|
@ -313,7 +313,8 @@ function advancedcontentfilter_get_rules()
|
||||||
|
|
||||||
$rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()]));
|
$rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()]));
|
||||||
|
|
||||||
return json_encode($rules);
|
$response->getBody()->write(json_encode($rules));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
||||||
|
@ -324,10 +325,11 @@ function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, Res
|
||||||
|
|
||||||
$rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()]);
|
$rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()]);
|
||||||
|
|
||||||
return json_encode($rule);
|
$response->getBody()->write(json_encode($rule));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
function advancedcontentfilter_post_rules(ServerRequestInterface $request)
|
function advancedcontentfilter_post_rules(ServerRequestInterface $request, ResponseInterface $response)
|
||||||
{
|
{
|
||||||
if (!DI::userSession()->getLocalUserId()) {
|
if (!DI::userSession()->getLocalUserId()) {
|
||||||
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
|
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
|
||||||
|
@ -360,7 +362,8 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request)
|
||||||
|
|
||||||
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
||||||
|
|
||||||
return json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]);
|
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
||||||
|
@ -391,7 +394,8 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res
|
||||||
|
|
||||||
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
||||||
|
|
||||||
return json_encode(['message' => DI::l10n()->t('Rule successfully updated')]);
|
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully updated')]));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
|
||||||
|
@ -414,7 +418,8 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request,
|
||||||
|
|
||||||
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
|
||||||
|
|
||||||
return json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]);
|
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args)
|
function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args)
|
||||||
|
@ -437,7 +442,8 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques
|
||||||
|
|
||||||
$return = advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row));
|
$return = advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row));
|
||||||
|
|
||||||
return json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]);
|
$response->getBody()->write(json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]));
|
||||||
|
return $response->withHeader('Content-Type', 'application/json');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -11,8 +11,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.6.0",
|
"slim/slim": "^4",
|
||||||
"slim/slim": "^3.1",
|
|
||||||
"symfony/expression-language": "^3.4"
|
"symfony/expression-language": "^3.4"
|
||||||
},
|
},
|
||||||
"license": "3-clause BSD license",
|
"license": "3-clause BSD license",
|
||||||
|
|
|
@ -4,40 +4,8 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "d0e3662dd9d910ffe4f71d325bc39319",
|
"content-hash": "3e87f0369e4799fc35d98f399c67f1e9",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
|
||||||
"name": "container-interop/container-interop",
|
|
||||||
"version": "1.2.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/container-interop/container-interop.git",
|
|
||||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
|
||||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Interop\\Container\\": "src/Interop/Container/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
|
||||||
"homepage": "https://github.com/container-interop/container-interop",
|
|
||||||
"abandoned": "psr/container",
|
|
||||||
"time": "2017-02-14T19:40:03+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "nikic/fast-route",
|
"name": "nikic/fast-route",
|
||||||
"version": "v1.3.0",
|
"version": "v1.3.0",
|
||||||
|
@ -84,56 +52,6 @@
|
||||||
],
|
],
|
||||||
"time": "2018-02-13T20:26:39+00:00"
|
"time": "2018-02-13T20:26:39+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pimple/pimple",
|
|
||||||
"version": "v3.2.3",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/silexphp/Pimple.git",
|
|
||||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
|
||||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0",
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"symfony/phpunit-bridge": "^3.2"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.2.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"Pimple": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Fabien Potencier",
|
|
||||||
"email": "fabien@symfony.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Pimple, a simple Dependency Injection Container",
|
|
||||||
"homepage": "http://pimple.sensiolabs.org",
|
|
||||||
"keywords": [
|
|
||||||
"container",
|
|
||||||
"dependency injection"
|
|
||||||
],
|
|
||||||
"time": "2018-01-21T07:42:36+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
@ -182,25 +100,25 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.0.0",
|
"version": "2.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -215,7 +133,7 @@
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common Container Interface (PHP FIG PSR-11)",
|
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||||
|
@ -227,24 +145,25 @@
|
||||||
"container-interop",
|
"container-interop",
|
||||||
"psr"
|
"psr"
|
||||||
],
|
],
|
||||||
"time": "2017-02-14T16:28:37+00:00"
|
"time": "2021-11-05T16:47:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-factory",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-message.git",
|
"url": "https://github.com/php-fig/http-factory.git",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=7.0.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
@ -261,6 +180,57 @@
|
||||||
"license": [
|
"license": [
|
||||||
"MIT"
|
"MIT"
|
||||||
],
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr",
|
||||||
|
"psr-17",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"time": "2023-04-10T20:10:41+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
|
@ -277,20 +247,126 @@
|
||||||
"request",
|
"request",
|
||||||
"response"
|
"response"
|
||||||
],
|
],
|
||||||
"time": "2016-08-06T14:39:51+00:00"
|
"time": "2023-04-04T09:50:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/http-server-handler",
|
||||||
"version": "1.1.2",
|
"version": "1.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/log.git",
|
"url": "https://github.com/php-fig/http-server-handler.git",
|
||||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||||
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Server\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP server-side request handler",
|
||||||
|
"keywords": [
|
||||||
|
"handler",
|
||||||
|
"http",
|
||||||
|
"http-interop",
|
||||||
|
"psr",
|
||||||
|
"psr-15",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response",
|
||||||
|
"server"
|
||||||
|
],
|
||||||
|
"time": "2023-04-10T20:06:20+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-server-middleware",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-server-middleware.git",
|
||||||
|
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||||
|
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0",
|
||||||
|
"psr/http-server-handler": "^1.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Server\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP server-side middleware",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-interop",
|
||||||
|
"middleware",
|
||||||
|
"psr",
|
||||||
|
"psr-15",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"time": "2023-04-11T06:14:47+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/log",
|
||||||
|
"version": "1.1.4",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/log.git",
|
||||||
|
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
||||||
|
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -314,7 +390,7 @@
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interface for logging libraries",
|
"description": "Common interface for logging libraries",
|
||||||
|
@ -324,7 +400,7 @@
|
||||||
"psr",
|
"psr",
|
||||||
"psr-3"
|
"psr-3"
|
||||||
],
|
],
|
||||||
"time": "2019-11-01T11:05:21+00:00"
|
"time": "2021-05-03T11:20:27+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/simple-cache",
|
"name": "psr/simple-cache",
|
||||||
|
@ -376,32 +452,51 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "slim/slim",
|
"name": "slim/slim",
|
||||||
"version": "3.9.2",
|
"version": "4.12.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/slimphp/Slim.git",
|
"url": "https://github.com/slimphp/Slim.git",
|
||||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118"
|
"reference": "e9e99c2b24398b967841c6c4c3048622cc7e2b18"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118",
|
"url": "https://api.github.com/repos/slimphp/Slim/zipball/e9e99c2b24398b967841c6c4c3048622cc7e2b18",
|
||||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118",
|
"reference": "e9e99c2b24398b967841c6c4c3048622cc7e2b18",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"container-interop/container-interop": "^1.2",
|
"ext-json": "*",
|
||||||
"nikic/fast-route": "^1.0",
|
"nikic/fast-route": "^1.3",
|
||||||
"php": ">=5.5.0",
|
"php": "^7.4 || ^8.0",
|
||||||
"pimple/pimple": "^3.0",
|
"psr/container": "^1.0 || ^2.0",
|
||||||
"psr/container": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/http-message": "^1.0"
|
"psr/http-message": "^1.1",
|
||||||
},
|
"psr/http-server-handler": "^1.0",
|
||||||
"provide": {
|
"psr/http-server-middleware": "^1.0",
|
||||||
"psr/http-message-implementation": "1.0"
|
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^4.0",
|
"adriansuter/php-autoload-override": "^1.4",
|
||||||
"squizlabs/php_codesniffer": "^2.5"
|
"ext-simplexml": "*",
|
||||||
|
"guzzlehttp/psr7": "^2.5",
|
||||||
|
"httpsoft/http-message": "^1.1",
|
||||||
|
"httpsoft/http-server-request": "^1.1",
|
||||||
|
"laminas/laminas-diactoros": "^2.17",
|
||||||
|
"nyholm/psr7": "^1.8",
|
||||||
|
"nyholm/psr7-server": "^1.0",
|
||||||
|
"phpspec/prophecy": "^1.17",
|
||||||
|
"phpspec/prophecy-phpunit": "^2.0",
|
||||||
|
"phpstan/phpstan": "^1.10",
|
||||||
|
"phpunit/phpunit": "^9.6",
|
||||||
|
"slim/http": "^1.3",
|
||||||
|
"slim/psr7": "^1.6",
|
||||||
|
"squizlabs/php_codesniffer": "^3.7"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-simplexml": "Needed to support XML format in BodyParsingMiddleware",
|
||||||
|
"ext-xml": "Needed to support XML format in BodyParsingMiddleware",
|
||||||
|
"php-di/php-di": "PHP-DI is the recommended container library to be used with Slim",
|
||||||
|
"slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information."
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -414,49 +509,64 @@
|
||||||
"MIT"
|
"MIT"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
|
||||||
"name": "Rob Allen",
|
|
||||||
"email": "rob@akrabat.com",
|
|
||||||
"homepage": "http://akrabat.com"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Josh Lockhart",
|
"name": "Josh Lockhart",
|
||||||
"email": "hello@joshlockhart.com",
|
"email": "hello@joshlockhart.com",
|
||||||
"homepage": "https://joshlockhart.com"
|
"homepage": "https://joshlockhart.com"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Gabriel Manricks",
|
|
||||||
"email": "gmanricks@me.com",
|
|
||||||
"homepage": "http://gabrielmanricks.com"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Andrew Smith",
|
"name": "Andrew Smith",
|
||||||
"email": "a.smith@silentworks.co.uk",
|
"email": "a.smith@silentworks.co.uk",
|
||||||
"homepage": "http://silentworks.co.uk"
|
"homepage": "http://silentworks.co.uk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rob Allen",
|
||||||
|
"email": "rob@akrabat.com",
|
||||||
|
"homepage": "http://akrabat.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pierre Berube",
|
||||||
|
"email": "pierre@lgse.com",
|
||||||
|
"homepage": "http://www.lgse.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gabriel Manricks",
|
||||||
|
"email": "gmanricks@me.com",
|
||||||
|
"homepage": "http://gabrielmanricks.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
||||||
"homepage": "https://slimframework.com",
|
"homepage": "https://www.slimframework.com",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"api",
|
"api",
|
||||||
"framework",
|
"framework",
|
||||||
"micro",
|
"micro",
|
||||||
"router"
|
"router"
|
||||||
],
|
],
|
||||||
"time": "2017-11-26T19:13:09+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://opencollective.com/slimphp",
|
||||||
|
"type": "open_collective"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/slim/slim",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-07-23T04:54:29+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v3.4.36",
|
"version": "v3.4.47",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/cache.git",
|
"url": "https://github.com/symfony/cache.git",
|
||||||
"reference": "3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3"
|
"reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/cache/zipball/3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3",
|
"url": "https://api.github.com/repos/symfony/cache/zipball/a7a14c4832760bd1fbd31be2859ffedc9b6ff813",
|
||||||
"reference": "3d9f46a6960fd5cd7f030f86adc5b4b63bcfa4e3",
|
"reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -475,16 +585,11 @@
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"cache/integration-tests": "dev-master",
|
"cache/integration-tests": "dev-master",
|
||||||
"doctrine/cache": "~1.6",
|
"doctrine/cache": "^1.6",
|
||||||
"doctrine/dbal": "~2.4",
|
"doctrine/dbal": "^2.4|^3.0",
|
||||||
"predis/predis": "~1.0"
|
"predis/predis": "^1.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.4-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Symfony\\Component\\Cache\\": ""
|
"Symfony\\Component\\Cache\\": ""
|
||||||
|
@ -513,32 +618,42 @@
|
||||||
"caching",
|
"caching",
|
||||||
"psr6"
|
"psr6"
|
||||||
],
|
],
|
||||||
"time": "2019-12-01T10:45:41+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-10-24T10:57:07+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/expression-language",
|
"name": "symfony/expression-language",
|
||||||
"version": "v3.4.8",
|
"version": "v3.4.47",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/expression-language.git",
|
"url": "https://github.com/symfony/expression-language.git",
|
||||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241"
|
"reference": "de38e66398fca1fcb9c48e80279910e6889cb28f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
"url": "https://api.github.com/repos/symfony/expression-language/zipball/de38e66398fca1fcb9c48e80279910e6889cb28f",
|
||||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
"reference": "de38e66398fca1fcb9c48e80279910e6889cb28f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9|>=7.0.8",
|
"php": "^5.5.9|>=7.0.8",
|
||||||
"symfony/cache": "~3.1|~4.0"
|
"symfony/cache": "~3.1|~4.0",
|
||||||
|
"symfony/polyfill-php70": "~1.6"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.4-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Symfony\\Component\\ExpressionLanguage\\": ""
|
"Symfony\\Component\\ExpressionLanguage\\": ""
|
||||||
|
@ -563,38 +678,56 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony ExpressionLanguage Component",
|
"description": "Symfony ExpressionLanguage Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2018-01-03T07:37:34+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-10-24T10:57:07+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-apcu",
|
"name": "symfony/polyfill-apcu",
|
||||||
"version": "v1.13.1",
|
"version": "v1.28.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-apcu.git",
|
"url": "https://github.com/symfony/polyfill-apcu.git",
|
||||||
"reference": "a8e961c841b9ec52927a87914f8820a1ad8f8116"
|
"reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/a8e961c841b9ec52927a87914f8820a1ad8f8116",
|
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899",
|
||||||
"reference": "a8e961c841b9ec52927a87914f8820a1ad8f8116",
|
"reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.3"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.13-dev"
|
"dev-main": "1.28-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Apcu\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Apcu\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -619,7 +752,86 @@
|
||||||
"portable",
|
"portable",
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"time": "2019-11-27T13:56:44+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-01-26T09:26:14+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-php70",
|
||||||
|
"version": "v1.20.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-php70.git",
|
||||||
|
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
|
||||||
|
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1"
|
||||||
|
},
|
||||||
|
"type": "metapackage",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "1.20-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-10-23T14:02:19+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
|
@ -631,5 +843,6 @@
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": ">=5.6.0"
|
"php": ">=5.6.0"
|
||||||
},
|
},
|
||||||
"platform-dev": []
|
"platform-dev": [],
|
||||||
|
"plugin-api-version": "1.1.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,31 +21,12 @@
|
||||||
|
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
|
||||||
$container = $slim->getContainer();
|
/** @var $slim \Slim\App */
|
||||||
|
|
||||||
// Error handler based off https://stackoverflow.com/a/48135009/757392
|
/**
|
||||||
$container['errorHandler'] = function () {
|
* The routing middleware should be added before the ErrorMiddleware
|
||||||
return function(Psr\Http\Message\RequestInterface $request, Psr\Http\Message\ResponseInterface $response, Exception $exception)
|
* Otherwise exceptions thrown from it will not be handled
|
||||||
{
|
*/
|
||||||
$responseCode = 500;
|
$slim->addRoutingMiddleware();
|
||||||
|
|
||||||
if (is_a($exception, 'Friendica\Network\HTTPException')) {
|
$errorMiddleware = $slim->addErrorMiddleware(true, true, true);
|
||||||
$responseCode = $exception->getCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
$errors['message'] = $exception->getMessage();
|
|
||||||
|
|
||||||
$errors['responseCode'] = $responseCode;
|
|
||||||
|
|
||||||
return $response
|
|
||||||
->withStatus($responseCode)
|
|
||||||
->withJson($errors);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
$container['notFoundHandler'] = function () {
|
|
||||||
return function ()
|
|
||||||
{
|
|
||||||
throw new \Friendica\Network\HTTPException\NotFoundException(DI::l10n()->t('Method not found'));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
|
@ -20,20 +20,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* @var $slim Slim\App */
|
/* @var $slim Slim\App */
|
||||||
$slim->group('/advancedcontentfilter/api', function () {
|
$slim->group('/advancedcontentfilter/api', function (\Slim\Routing\RouteCollectorProxy $app) {
|
||||||
/* @var $this Slim\App */
|
$app->group('/rules', function (\Slim\Routing\RouteCollectorProxy $app) {
|
||||||
$this->group('/rules', function () {
|
$app->get('', 'advancedcontentfilter_get_rules');
|
||||||
/* @var $this Slim\App */
|
$app->post('', 'advancedcontentfilter_post_rules');
|
||||||
$this->get('', 'advancedcontentfilter_get_rules');
|
|
||||||
$this->post('', 'advancedcontentfilter_post_rules');
|
|
||||||
|
|
||||||
$this->get('/{id}', 'advancedcontentfilter_get_rules_id');
|
$app->get('/{id}', 'advancedcontentfilter_get_rules_id');
|
||||||
$this->put('/{id}', 'advancedcontentfilter_put_rules_id');
|
$app->put('/{id}', 'advancedcontentfilter_put_rules_id');
|
||||||
$this->delete('/{id}', 'advancedcontentfilter_delete_rules_id');
|
$app->delete('/{id}', 'advancedcontentfilter_delete_rules_id');
|
||||||
});
|
});
|
||||||
|
|
||||||
$this->group('/variables', function () {
|
$app->group('/variables', function (\Slim\Routing\RouteCollectorProxy $app) {
|
||||||
/* @var $this Slim\App */
|
$app->get('/{guid}', 'advancedcontentfilter_get_variables_guid');
|
||||||
$this->get('/{guid}', 'advancedcontentfilter_get_variables_guid');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ClassLoader
|
||||||
public function getPrefixes()
|
public function getPrefixes()
|
||||||
{
|
{
|
||||||
if (!empty($this->prefixesPsr0)) {
|
if (!empty($this->prefixesPsr0)) {
|
||||||
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||||
}
|
}
|
||||||
|
|
||||||
return array();
|
return array();
|
||||||
|
@ -279,7 +279,7 @@ class ClassLoader
|
||||||
*/
|
*/
|
||||||
public function setApcuPrefix($apcuPrefix)
|
public function setApcuPrefix($apcuPrefix)
|
||||||
{
|
{
|
||||||
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -23,27 +23,6 @@ return array(
|
||||||
'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php',
|
'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php',
|
||||||
'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php',
|
'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php',
|
||||||
'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php',
|
'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php',
|
||||||
'Interop\\Container\\ContainerInterface' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
|
|
||||||
'Interop\\Container\\Exception\\ContainerException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
|
|
||||||
'Interop\\Container\\Exception\\NotFoundException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
|
|
||||||
'Pimple\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Container.php',
|
|
||||||
'Pimple\\Exception\\ExpectedInvokableException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php',
|
|
||||||
'Pimple\\Exception\\FrozenServiceException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php',
|
|
||||||
'Pimple\\Exception\\InvalidServiceIdentifierException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/InvalidServiceIdentifierException.php',
|
|
||||||
'Pimple\\Exception\\UnknownIdentifierException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php',
|
|
||||||
'Pimple\\Psr11\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Psr11/Container.php',
|
|
||||||
'Pimple\\Psr11\\ServiceLocator' => $vendorDir . '/pimple/pimple/src/Pimple/Psr11/ServiceLocator.php',
|
|
||||||
'Pimple\\ServiceIterator' => $vendorDir . '/pimple/pimple/src/Pimple/ServiceIterator.php',
|
|
||||||
'Pimple\\ServiceProviderInterface' => $vendorDir . '/pimple/pimple/src/Pimple/ServiceProviderInterface.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\Invokable' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\NonInvokable' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\PimpleServiceProvider' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\Service' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php',
|
|
||||||
'Pimple\\Tests\\PimpleServiceProviderInterfaceTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php',
|
|
||||||
'Pimple\\Tests\\PimpleTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/PimpleTest.php',
|
|
||||||
'Pimple\\Tests\\Psr11\\ContainerTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php',
|
|
||||||
'Pimple\\Tests\\Psr11\\ServiceLocatorTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php',
|
|
||||||
'Pimple\\Tests\\ServiceIteratorTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php',
|
|
||||||
'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php',
|
'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php',
|
||||||
'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php',
|
'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php',
|
||||||
'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php',
|
'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php',
|
||||||
|
@ -52,12 +31,20 @@ return array(
|
||||||
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
|
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
|
||||||
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
|
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
|
||||||
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
|
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
|
||||||
|
'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
|
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
|
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
|
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
|
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
|
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
|
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
|
||||||
|
'Psr\\Http\\Server\\MiddlewareInterface' => $vendorDir . '/psr/http-server-middleware/src/MiddlewareInterface.php',
|
||||||
|
'Psr\\Http\\Server\\RequestHandlerInterface' => $vendorDir . '/psr/http-server-handler/src/RequestHandlerInterface.php',
|
||||||
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
|
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
|
||||||
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
||||||
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
|
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
|
||||||
|
@ -66,57 +53,83 @@ return array(
|
||||||
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
||||||
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
||||||
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
||||||
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php',
|
||||||
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||||
|
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
||||||
'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
|
'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
|
||||||
'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
|
'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
|
||||||
'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
|
'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
|
||||||
'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php',
|
'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php',
|
||||||
'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php',
|
'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php',
|
||||||
'Slim\\CallableResolverAwareTrait' => $vendorDir . '/slim/slim/Slim/CallableResolverAwareTrait.php',
|
'Slim\\Error\\AbstractErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/AbstractErrorRenderer.php',
|
||||||
'Slim\\Collection' => $vendorDir . '/slim/slim/Slim/Collection.php',
|
'Slim\\Error\\Renderers\\HtmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php',
|
||||||
'Slim\\Container' => $vendorDir . '/slim/slim/Slim/Container.php',
|
'Slim\\Error\\Renderers\\JsonErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php',
|
||||||
'Slim\\DefaultServicesProvider' => $vendorDir . '/slim/slim/Slim/DefaultServicesProvider.php',
|
'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php',
|
||||||
'Slim\\DeferredCallable' => $vendorDir . '/slim/slim/Slim/DeferredCallable.php',
|
'Slim\\Error\\Renderers\\XmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php',
|
||||||
'Slim\\Exception\\ContainerException' => $vendorDir . '/slim/slim/Slim/Exception/ContainerException.php',
|
'Slim\\Exception\\HttpBadRequestException' => $vendorDir . '/slim/slim/Slim/Exception/HttpBadRequestException.php',
|
||||||
'Slim\\Exception\\ContainerValueNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/ContainerValueNotFoundException.php',
|
'Slim\\Exception\\HttpException' => $vendorDir . '/slim/slim/Slim/Exception/HttpException.php',
|
||||||
'Slim\\Exception\\InvalidMethodException' => $vendorDir . '/slim/slim/Slim/Exception/InvalidMethodException.php',
|
'Slim\\Exception\\HttpForbiddenException' => $vendorDir . '/slim/slim/Slim/Exception/HttpForbiddenException.php',
|
||||||
'Slim\\Exception\\MethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/MethodNotAllowedException.php',
|
'Slim\\Exception\\HttpGoneException' => $vendorDir . '/slim/slim/Slim/Exception/HttpGoneException.php',
|
||||||
'Slim\\Exception\\NotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/NotFoundException.php',
|
'Slim\\Exception\\HttpInternalServerErrorException' => $vendorDir . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php',
|
||||||
'Slim\\Exception\\SlimException' => $vendorDir . '/slim/slim/Slim/Exception/SlimException.php',
|
'Slim\\Exception\\HttpMethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php',
|
||||||
'Slim\\Handlers\\AbstractError' => $vendorDir . '/slim/slim/Slim/Handlers/AbstractError.php',
|
'Slim\\Exception\\HttpNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotFoundException.php',
|
||||||
'Slim\\Handlers\\AbstractHandler' => $vendorDir . '/slim/slim/Slim/Handlers/AbstractHandler.php',
|
'Slim\\Exception\\HttpNotImplementedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotImplementedException.php',
|
||||||
'Slim\\Handlers\\Error' => $vendorDir . '/slim/slim/Slim/Handlers/Error.php',
|
'Slim\\Exception\\HttpSpecializedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpSpecializedException.php',
|
||||||
'Slim\\Handlers\\NotAllowed' => $vendorDir . '/slim/slim/Slim/Handlers/NotAllowed.php',
|
'Slim\\Exception\\HttpUnauthorizedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php',
|
||||||
'Slim\\Handlers\\NotFound' => $vendorDir . '/slim/slim/Slim/Handlers/NotFound.php',
|
'Slim\\Factory\\AppFactory' => $vendorDir . '/slim/slim/Slim/Factory/AppFactory.php',
|
||||||
'Slim\\Handlers\\PhpError' => $vendorDir . '/slim/slim/Slim/Handlers/PhpError.php',
|
'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\Psr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php',
|
||||||
|
'Slim\\Factory\\Psr17\\ServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\ServerRequestCreatorFactory' => $vendorDir . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php',
|
||||||
|
'Slim\\Handlers\\ErrorHandler' => $vendorDir . '/slim/slim/Slim/Handlers/ErrorHandler.php',
|
||||||
|
'Slim\\Handlers\\Strategies\\RequestHandler' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php',
|
||||||
'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
|
'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
|
||||||
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
|
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
|
||||||
'Slim\\Http\\Body' => $vendorDir . '/slim/slim/Slim/Http/Body.php',
|
'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php',
|
||||||
'Slim\\Http\\Cookies' => $vendorDir . '/slim/slim/Slim/Http/Cookies.php',
|
'Slim\\Interfaces\\AdvancedCallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php',
|
||||||
'Slim\\Http\\Environment' => $vendorDir . '/slim/slim/Slim/Http/Environment.php',
|
|
||||||
'Slim\\Http\\Headers' => $vendorDir . '/slim/slim/Slim/Http/Headers.php',
|
|
||||||
'Slim\\Http\\Message' => $vendorDir . '/slim/slim/Slim/Http/Message.php',
|
|
||||||
'Slim\\Http\\Request' => $vendorDir . '/slim/slim/Slim/Http/Request.php',
|
|
||||||
'Slim\\Http\\RequestBody' => $vendorDir . '/slim/slim/Slim/Http/RequestBody.php',
|
|
||||||
'Slim\\Http\\Response' => $vendorDir . '/slim/slim/Slim/Http/Response.php',
|
|
||||||
'Slim\\Http\\Stream' => $vendorDir . '/slim/slim/Slim/Http/Stream.php',
|
|
||||||
'Slim\\Http\\UploadedFile' => $vendorDir . '/slim/slim/Slim/Http/UploadedFile.php',
|
|
||||||
'Slim\\Http\\Uri' => $vendorDir . '/slim/slim/Slim/Http/Uri.php',
|
|
||||||
'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
|
'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
|
||||||
'Slim\\Interfaces\\CollectionInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CollectionInterface.php',
|
'Slim\\Interfaces\\DispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/DispatcherInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\CookiesInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/CookiesInterface.php',
|
'Slim\\Interfaces\\ErrorHandlerInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\EnvironmentInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php',
|
'Slim\\Interfaces\\ErrorRendererInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\HeadersInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/HeadersInterface.php',
|
|
||||||
'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
|
'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
|
||||||
|
'Slim\\Interfaces\\MiddlewareDispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php',
|
||||||
|
'Slim\\Interfaces\\Psr17FactoryInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php',
|
||||||
|
'Slim\\Interfaces\\Psr17FactoryProviderInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php',
|
||||||
|
'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php',
|
||||||
|
'Slim\\Interfaces\\RouteCollectorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php',
|
||||||
|
'Slim\\Interfaces\\RouteCollectorProxyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php',
|
||||||
'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
|
'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
|
||||||
'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php',
|
'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php',
|
||||||
'Slim\\Interfaces\\RouterInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouterInterface.php',
|
'Slim\\Interfaces\\RouteParserInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteParserInterface.php',
|
||||||
'Slim\\MiddlewareAwareTrait' => $vendorDir . '/slim/slim/Slim/MiddlewareAwareTrait.php',
|
'Slim\\Interfaces\\RouteResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php',
|
||||||
'Slim\\Routable' => $vendorDir . '/slim/slim/Slim/Routable.php',
|
'Slim\\Interfaces\\ServerRequestCreatorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php',
|
||||||
'Slim\\Route' => $vendorDir . '/slim/slim/Slim/Route.php',
|
'Slim\\Logger' => $vendorDir . '/slim/slim/Slim/Logger.php',
|
||||||
'Slim\\RouteGroup' => $vendorDir . '/slim/slim/Slim/RouteGroup.php',
|
'Slim\\MiddlewareDispatcher' => $vendorDir . '/slim/slim/Slim/MiddlewareDispatcher.php',
|
||||||
'Slim\\Router' => $vendorDir . '/slim/slim/Slim/Router.php',
|
'Slim\\Middleware\\BodyParsingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php',
|
||||||
|
'Slim\\Middleware\\ContentLengthMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php',
|
||||||
|
'Slim\\Middleware\\ErrorMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ErrorMiddleware.php',
|
||||||
|
'Slim\\Middleware\\MethodOverrideMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php',
|
||||||
|
'Slim\\Middleware\\OutputBufferingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php',
|
||||||
|
'Slim\\Middleware\\RoutingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/RoutingMiddleware.php',
|
||||||
|
'Slim\\ResponseEmitter' => $vendorDir . '/slim/slim/Slim/ResponseEmitter.php',
|
||||||
|
'Slim\\Routing\\Dispatcher' => $vendorDir . '/slim/slim/Slim/Routing/Dispatcher.php',
|
||||||
|
'Slim\\Routing\\FastRouteDispatcher' => $vendorDir . '/slim/slim/Slim/Routing/FastRouteDispatcher.php',
|
||||||
|
'Slim\\Routing\\Route' => $vendorDir . '/slim/slim/Slim/Routing/Route.php',
|
||||||
|
'Slim\\Routing\\RouteCollector' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollector.php',
|
||||||
|
'Slim\\Routing\\RouteCollectorProxy' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollectorProxy.php',
|
||||||
|
'Slim\\Routing\\RouteContext' => $vendorDir . '/slim/slim/Slim/Routing/RouteContext.php',
|
||||||
|
'Slim\\Routing\\RouteGroup' => $vendorDir . '/slim/slim/Slim/Routing/RouteGroup.php',
|
||||||
|
'Slim\\Routing\\RouteParser' => $vendorDir . '/slim/slim/Slim/Routing/RouteParser.php',
|
||||||
|
'Slim\\Routing\\RouteResolver' => $vendorDir . '/slim/slim/Slim/Routing/RouteResolver.php',
|
||||||
|
'Slim\\Routing\\RouteRunner' => $vendorDir . '/slim/slim/Slim/Routing/RouteRunner.php',
|
||||||
|
'Slim\\Routing\\RoutingResults' => $vendorDir . '/slim/slim/Slim/Routing/RoutingResults.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/cache/Adapter/AdapterInterface.php',
|
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/cache/Adapter/AdapterInterface.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => $vendorDir . '/symfony/cache/Adapter/ApcuAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => $vendorDir . '/symfony/cache/Adapter/ApcuAdapter.php',
|
||||||
|
|
|
@ -6,5 +6,4 @@ $vendorDir = dirname(dirname(__FILE__));
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'Pimple' => array($vendorDir . '/pimple/pimple/src'),
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,9 +12,9 @@ return array(
|
||||||
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
|
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
|
||||||
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
||||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
|
||||||
|
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
|
||||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
||||||
'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'),
|
|
||||||
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,6 +13,9 @@ class ComposerAutoloaderInitAdvancedContentFilterAddon
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Composer\Autoload\ClassLoader
|
||||||
|
*/
|
||||||
public static function getLoader()
|
public static function getLoader()
|
||||||
{
|
{
|
||||||
if (null !== self::$loader) {
|
if (null !== self::$loader) {
|
||||||
|
|
|
@ -23,14 +23,11 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
array (
|
array (
|
||||||
'Psr\\SimpleCache\\' => 16,
|
'Psr\\SimpleCache\\' => 16,
|
||||||
'Psr\\Log\\' => 8,
|
'Psr\\Log\\' => 8,
|
||||||
|
'Psr\\Http\\Server\\' => 16,
|
||||||
'Psr\\Http\\Message\\' => 17,
|
'Psr\\Http\\Message\\' => 17,
|
||||||
'Psr\\Container\\' => 14,
|
'Psr\\Container\\' => 14,
|
||||||
'Psr\\Cache\\' => 10,
|
'Psr\\Cache\\' => 10,
|
||||||
),
|
),
|
||||||
'I' =>
|
|
||||||
array (
|
|
||||||
'Interop\\Container\\' => 18,
|
|
||||||
),
|
|
||||||
'F' =>
|
'F' =>
|
||||||
array (
|
array (
|
||||||
'FastRoute\\' => 10,
|
'FastRoute\\' => 10,
|
||||||
|
@ -62,9 +59,15 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
|
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
|
||||||
),
|
),
|
||||||
|
'Psr\\Http\\Server\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/psr/http-server-handler/src',
|
||||||
|
1 => __DIR__ . '/..' . '/psr/http-server-middleware/src',
|
||||||
|
),
|
||||||
'Psr\\Http\\Message\\' =>
|
'Psr\\Http\\Message\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/http-message/src',
|
0 => __DIR__ . '/..' . '/psr/http-factory/src',
|
||||||
|
1 => __DIR__ . '/..' . '/psr/http-message/src',
|
||||||
),
|
),
|
||||||
'Psr\\Container\\' =>
|
'Psr\\Container\\' =>
|
||||||
array (
|
array (
|
||||||
|
@ -74,26 +77,12 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/cache/src',
|
0 => __DIR__ . '/..' . '/psr/cache/src',
|
||||||
),
|
),
|
||||||
'Interop\\Container\\' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container',
|
|
||||||
),
|
|
||||||
'FastRoute\\' =>
|
'FastRoute\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
|
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
public static $prefixesPsr0 = array (
|
|
||||||
'P' =>
|
|
||||||
array (
|
|
||||||
'Pimple' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/pimple/pimple/src',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
public static $classMap = array (
|
public static $classMap = array (
|
||||||
'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
|
'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
|
||||||
'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
|
'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
|
||||||
|
@ -112,27 +101,6 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php',
|
'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php',
|
||||||
'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php',
|
'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php',
|
||||||
'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php',
|
'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php',
|
||||||
'Interop\\Container\\ContainerInterface' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
|
|
||||||
'Interop\\Container\\Exception\\ContainerException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
|
|
||||||
'Interop\\Container\\Exception\\NotFoundException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
|
|
||||||
'Pimple\\Container' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Container.php',
|
|
||||||
'Pimple\\Exception\\ExpectedInvokableException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php',
|
|
||||||
'Pimple\\Exception\\FrozenServiceException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php',
|
|
||||||
'Pimple\\Exception\\InvalidServiceIdentifierException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/InvalidServiceIdentifierException.php',
|
|
||||||
'Pimple\\Exception\\UnknownIdentifierException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php',
|
|
||||||
'Pimple\\Psr11\\Container' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Psr11/Container.php',
|
|
||||||
'Pimple\\Psr11\\ServiceLocator' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Psr11/ServiceLocator.php',
|
|
||||||
'Pimple\\ServiceIterator' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/ServiceIterator.php',
|
|
||||||
'Pimple\\ServiceProviderInterface' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/ServiceProviderInterface.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\Invokable' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\NonInvokable' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\PimpleServiceProvider' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php',
|
|
||||||
'Pimple\\Tests\\Fixtures\\Service' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php',
|
|
||||||
'Pimple\\Tests\\PimpleServiceProviderInterfaceTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php',
|
|
||||||
'Pimple\\Tests\\PimpleTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/PimpleTest.php',
|
|
||||||
'Pimple\\Tests\\Psr11\\ContainerTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php',
|
|
||||||
'Pimple\\Tests\\Psr11\\ServiceLocatorTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php',
|
|
||||||
'Pimple\\Tests\\ServiceIteratorTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php',
|
|
||||||
'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php',
|
'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php',
|
||||||
'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php',
|
'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php',
|
||||||
'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php',
|
'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php',
|
||||||
|
@ -141,12 +109,20 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
|
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
|
||||||
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
|
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
|
||||||
'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
|
'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
|
||||||
|
'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
|
'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ResponseFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
|
'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
|
||||||
|
'Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ServerRequestFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
|
'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
|
||||||
|
'Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/StreamFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
|
'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UploadedFileFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
|
'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
|
||||||
|
'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php',
|
||||||
'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
|
'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
|
||||||
|
'Psr\\Http\\Server\\MiddlewareInterface' => __DIR__ . '/..' . '/psr/http-server-middleware/src/MiddlewareInterface.php',
|
||||||
|
'Psr\\Http\\Server\\RequestHandlerInterface' => __DIR__ . '/..' . '/psr/http-server-handler/src/RequestHandlerInterface.php',
|
||||||
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
|
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
|
||||||
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
||||||
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
|
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
|
||||||
|
@ -155,57 +131,83 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
||||||
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
||||||
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
||||||
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php',
|
||||||
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
||||||
|
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
|
||||||
'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php',
|
'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php',
|
||||||
'Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php',
|
'Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php',
|
||||||
'Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php',
|
'Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php',
|
||||||
'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php',
|
'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php',
|
||||||
'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php',
|
'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php',
|
||||||
'Slim\\CallableResolverAwareTrait' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolverAwareTrait.php',
|
'Slim\\Error\\AbstractErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/AbstractErrorRenderer.php',
|
||||||
'Slim\\Collection' => __DIR__ . '/..' . '/slim/slim/Slim/Collection.php',
|
'Slim\\Error\\Renderers\\HtmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php',
|
||||||
'Slim\\Container' => __DIR__ . '/..' . '/slim/slim/Slim/Container.php',
|
'Slim\\Error\\Renderers\\JsonErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php',
|
||||||
'Slim\\DefaultServicesProvider' => __DIR__ . '/..' . '/slim/slim/Slim/DefaultServicesProvider.php',
|
'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php',
|
||||||
'Slim\\DeferredCallable' => __DIR__ . '/..' . '/slim/slim/Slim/DeferredCallable.php',
|
'Slim\\Error\\Renderers\\XmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php',
|
||||||
'Slim\\Exception\\ContainerException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/ContainerException.php',
|
'Slim\\Exception\\HttpBadRequestException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpBadRequestException.php',
|
||||||
'Slim\\Exception\\ContainerValueNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/ContainerValueNotFoundException.php',
|
'Slim\\Exception\\HttpException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpException.php',
|
||||||
'Slim\\Exception\\InvalidMethodException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/InvalidMethodException.php',
|
'Slim\\Exception\\HttpForbiddenException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpForbiddenException.php',
|
||||||
'Slim\\Exception\\MethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/MethodNotAllowedException.php',
|
'Slim\\Exception\\HttpGoneException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpGoneException.php',
|
||||||
'Slim\\Exception\\NotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/NotFoundException.php',
|
'Slim\\Exception\\HttpInternalServerErrorException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php',
|
||||||
'Slim\\Exception\\SlimException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/SlimException.php',
|
'Slim\\Exception\\HttpMethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php',
|
||||||
'Slim\\Handlers\\AbstractError' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/AbstractError.php',
|
'Slim\\Exception\\HttpNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotFoundException.php',
|
||||||
'Slim\\Handlers\\AbstractHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/AbstractHandler.php',
|
'Slim\\Exception\\HttpNotImplementedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotImplementedException.php',
|
||||||
'Slim\\Handlers\\Error' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Error.php',
|
'Slim\\Exception\\HttpSpecializedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpSpecializedException.php',
|
||||||
'Slim\\Handlers\\NotAllowed' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/NotAllowed.php',
|
'Slim\\Exception\\HttpUnauthorizedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php',
|
||||||
'Slim\\Handlers\\NotFound' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/NotFound.php',
|
'Slim\\Factory\\AppFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/AppFactory.php',
|
||||||
'Slim\\Handlers\\PhpError' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/PhpError.php',
|
'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\Psr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php',
|
||||||
|
'Slim\\Factory\\Psr17\\ServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php',
|
||||||
|
'Slim\\Factory\\Psr17\\SlimPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php',
|
||||||
|
'Slim\\Factory\\ServerRequestCreatorFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php',
|
||||||
|
'Slim\\Handlers\\ErrorHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/ErrorHandler.php',
|
||||||
|
'Slim\\Handlers\\Strategies\\RequestHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php',
|
||||||
'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
|
'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
|
||||||
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
|
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
|
||||||
'Slim\\Http\\Body' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Body.php',
|
'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php',
|
||||||
'Slim\\Http\\Cookies' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Cookies.php',
|
'Slim\\Interfaces\\AdvancedCallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php',
|
||||||
'Slim\\Http\\Environment' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Environment.php',
|
|
||||||
'Slim\\Http\\Headers' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Headers.php',
|
|
||||||
'Slim\\Http\\Message' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Message.php',
|
|
||||||
'Slim\\Http\\Request' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Request.php',
|
|
||||||
'Slim\\Http\\RequestBody' => __DIR__ . '/..' . '/slim/slim/Slim/Http/RequestBody.php',
|
|
||||||
'Slim\\Http\\Response' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Response.php',
|
|
||||||
'Slim\\Http\\Stream' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Stream.php',
|
|
||||||
'Slim\\Http\\UploadedFile' => __DIR__ . '/..' . '/slim/slim/Slim/Http/UploadedFile.php',
|
|
||||||
'Slim\\Http\\Uri' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Uri.php',
|
|
||||||
'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
|
'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
|
||||||
'Slim\\Interfaces\\CollectionInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CollectionInterface.php',
|
'Slim\\Interfaces\\DispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/DispatcherInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\CookiesInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/CookiesInterface.php',
|
'Slim\\Interfaces\\ErrorHandlerInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\EnvironmentInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php',
|
'Slim\\Interfaces\\ErrorRendererInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php',
|
||||||
'Slim\\Interfaces\\Http\\HeadersInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/HeadersInterface.php',
|
|
||||||
'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
|
'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
|
||||||
|
'Slim\\Interfaces\\MiddlewareDispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php',
|
||||||
|
'Slim\\Interfaces\\Psr17FactoryInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php',
|
||||||
|
'Slim\\Interfaces\\Psr17FactoryProviderInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php',
|
||||||
|
'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php',
|
||||||
|
'Slim\\Interfaces\\RouteCollectorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php',
|
||||||
|
'Slim\\Interfaces\\RouteCollectorProxyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php',
|
||||||
'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
|
'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
|
||||||
'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php',
|
'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php',
|
||||||
'Slim\\Interfaces\\RouterInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouterInterface.php',
|
'Slim\\Interfaces\\RouteParserInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteParserInterface.php',
|
||||||
'Slim\\MiddlewareAwareTrait' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareAwareTrait.php',
|
'Slim\\Interfaces\\RouteResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php',
|
||||||
'Slim\\Routable' => __DIR__ . '/..' . '/slim/slim/Slim/Routable.php',
|
'Slim\\Interfaces\\ServerRequestCreatorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php',
|
||||||
'Slim\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Route.php',
|
'Slim\\Logger' => __DIR__ . '/..' . '/slim/slim/Slim/Logger.php',
|
||||||
'Slim\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/RouteGroup.php',
|
'Slim\\MiddlewareDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareDispatcher.php',
|
||||||
'Slim\\Router' => __DIR__ . '/..' . '/slim/slim/Slim/Router.php',
|
'Slim\\Middleware\\BodyParsingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php',
|
||||||
|
'Slim\\Middleware\\ContentLengthMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php',
|
||||||
|
'Slim\\Middleware\\ErrorMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ErrorMiddleware.php',
|
||||||
|
'Slim\\Middleware\\MethodOverrideMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php',
|
||||||
|
'Slim\\Middleware\\OutputBufferingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php',
|
||||||
|
'Slim\\Middleware\\RoutingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/RoutingMiddleware.php',
|
||||||
|
'Slim\\ResponseEmitter' => __DIR__ . '/..' . '/slim/slim/Slim/ResponseEmitter.php',
|
||||||
|
'Slim\\Routing\\Dispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Dispatcher.php',
|
||||||
|
'Slim\\Routing\\FastRouteDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/FastRouteDispatcher.php',
|
||||||
|
'Slim\\Routing\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Route.php',
|
||||||
|
'Slim\\Routing\\RouteCollector' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollector.php',
|
||||||
|
'Slim\\Routing\\RouteCollectorProxy' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollectorProxy.php',
|
||||||
|
'Slim\\Routing\\RouteContext' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteContext.php',
|
||||||
|
'Slim\\Routing\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteGroup.php',
|
||||||
|
'Slim\\Routing\\RouteParser' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteParser.php',
|
||||||
|
'Slim\\Routing\\RouteResolver' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteResolver.php',
|
||||||
|
'Slim\\Routing\\RouteRunner' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteRunner.php',
|
||||||
|
'Slim\\Routing\\RoutingResults' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RoutingResults.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/AdapterInterface.php',
|
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/AdapterInterface.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ApcuAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ApcuAdapter.php',
|
||||||
|
@ -294,7 +296,6 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
return \Closure::bind(function () use ($loader) {
|
return \Closure::bind(function () use ($loader) {
|
||||||
$loader->prefixLengthsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixLengthsPsr4;
|
$loader->prefixLengthsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixLengthsPsr4;
|
||||||
$loader->prefixDirsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixDirsPsr4;
|
$loader->prefixDirsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixDirsPsr4;
|
||||||
$loader->prefixesPsr0 = ComposerStaticInitAdvancedContentFilterAddon::$prefixesPsr0;
|
|
||||||
$loader->classMap = ComposerStaticInitAdvancedContentFilterAddon::$classMap;
|
$loader->classMap = ComposerStaticInitAdvancedContentFilterAddon::$classMap;
|
||||||
|
|
||||||
}, null, ClassLoader::class);
|
}, null, ClassLoader::class);
|
||||||
|
|
|
@ -1,37 +1,4 @@
|
||||||
[
|
[
|
||||||
{
|
|
||||||
"name": "container-interop/container-interop",
|
|
||||||
"version": "1.2.0",
|
|
||||||
"version_normalized": "1.2.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/container-interop/container-interop.git",
|
|
||||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
|
||||||
"reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
},
|
|
||||||
"time": "2017-02-14T19:40:03+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Interop\\Container\\": "src/Interop/Container/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
|
||||||
"homepage": "https://github.com/container-interop/container-interop"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "nikic/fast-route",
|
"name": "nikic/fast-route",
|
||||||
"version": "v1.3.0",
|
"version": "v1.3.0",
|
||||||
|
@ -80,58 +47,6 @@
|
||||||
"routing"
|
"routing"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "pimple/pimple",
|
|
||||||
"version": "v3.2.3",
|
|
||||||
"version_normalized": "3.2.3.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/silexphp/Pimple.git",
|
|
||||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
|
||||||
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0",
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"symfony/phpunit-bridge": "^3.2"
|
|
||||||
},
|
|
||||||
"time": "2018-01-21T07:42:36+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.2.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"Pimple": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Fabien Potencier",
|
|
||||||
"email": "fabien@symfony.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Pimple, a simple Dependency Injection Container",
|
|
||||||
"homepage": "http://pimple.sensiolabs.org",
|
|
||||||
"keywords": [
|
|
||||||
"container",
|
|
||||||
"dependency injection"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
@ -182,27 +97,27 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.0.0",
|
"version": "2.0.2",
|
||||||
"version_normalized": "1.0.0.0",
|
"version_normalized": "2.0.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
"reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"time": "2017-02-14T16:28:37+00:00",
|
"time": "2021-11-05T16:47:00+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
|
@ -218,7 +133,7 @@
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common Container Interface (PHP FIG PSR-11)",
|
"description": "Common Container Interface (PHP FIG PSR-11)",
|
||||||
|
@ -232,24 +147,25 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-factory",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"version_normalized": "1.0.1.0",
|
"version_normalized": "1.0.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/http-message.git",
|
"url": "https://github.com/php-fig/http-factory.git",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=7.0.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
},
|
},
|
||||||
"time": "2016-08-06T14:39:51+00:00",
|
"time": "2023-04-10T20:10:41+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
|
@ -266,6 +182,59 @@
|
||||||
"license": [
|
"license": [
|
||||||
"MIT"
|
"MIT"
|
||||||
],
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr",
|
||||||
|
"psr-17",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "1.1",
|
||||||
|
"version_normalized": "1.1.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-04T09:50:52+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
|
@ -284,28 +253,138 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/http-server-handler",
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"version_normalized": "1.0.2.0",
|
"version_normalized": "1.0.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/log.git",
|
"url": "https://github.com/php-fig/http-server-handler.git",
|
||||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
|
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
"url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
"reference": "84c4fb66179be4caaf8e97bd239203245302e7d4",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-10T20:06:20+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Server\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP server-side request handler",
|
||||||
|
"keywords": [
|
||||||
|
"handler",
|
||||||
|
"http",
|
||||||
|
"http-interop",
|
||||||
|
"psr",
|
||||||
|
"psr-15",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response",
|
||||||
|
"server"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-server-middleware",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"version_normalized": "1.0.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-server-middleware.git",
|
||||||
|
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||||
|
"reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0",
|
||||||
|
"psr/http-server-handler": "^1.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-11T06:14:47+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Server\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP server-side middleware",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-interop",
|
||||||
|
"middleware",
|
||||||
|
"psr",
|
||||||
|
"psr-15",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/log",
|
||||||
|
"version": "1.1.4",
|
||||||
|
"version_normalized": "1.1.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/log.git",
|
||||||
|
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
||||||
|
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=5.3.0"
|
||||||
},
|
},
|
||||||
"time": "2016-10-10T12:19:37+00:00",
|
"time": "2021-05-03T11:20:27+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "1.1.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
|
@ -321,7 +400,7 @@
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Common interface for logging libraries",
|
"description": "Common interface for logging libraries",
|
||||||
|
@ -384,35 +463,54 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "slim/slim",
|
"name": "slim/slim",
|
||||||
"version": "3.9.2",
|
"version": "4.12.0",
|
||||||
"version_normalized": "3.9.2.0",
|
"version_normalized": "4.12.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/slimphp/Slim.git",
|
"url": "https://github.com/slimphp/Slim.git",
|
||||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118"
|
"reference": "e9e99c2b24398b967841c6c4c3048622cc7e2b18"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/slimphp/Slim/zipball/4086d0106cf5a7135c69fce4161fe355a8feb118",
|
"url": "https://api.github.com/repos/slimphp/Slim/zipball/e9e99c2b24398b967841c6c4c3048622cc7e2b18",
|
||||||
"reference": "4086d0106cf5a7135c69fce4161fe355a8feb118",
|
"reference": "e9e99c2b24398b967841c6c4c3048622cc7e2b18",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"container-interop/container-interop": "^1.2",
|
"ext-json": "*",
|
||||||
"nikic/fast-route": "^1.0",
|
"nikic/fast-route": "^1.3",
|
||||||
"php": ">=5.5.0",
|
"php": "^7.4 || ^8.0",
|
||||||
"pimple/pimple": "^3.0",
|
"psr/container": "^1.0 || ^2.0",
|
||||||
"psr/container": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/http-message": "^1.0"
|
"psr/http-message": "^1.1",
|
||||||
},
|
"psr/http-server-handler": "^1.0",
|
||||||
"provide": {
|
"psr/http-server-middleware": "^1.0",
|
||||||
"psr/http-message-implementation": "1.0"
|
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^4.0",
|
"adriansuter/php-autoload-override": "^1.4",
|
||||||
"squizlabs/php_codesniffer": "^2.5"
|
"ext-simplexml": "*",
|
||||||
|
"guzzlehttp/psr7": "^2.5",
|
||||||
|
"httpsoft/http-message": "^1.1",
|
||||||
|
"httpsoft/http-server-request": "^1.1",
|
||||||
|
"laminas/laminas-diactoros": "^2.17",
|
||||||
|
"nyholm/psr7": "^1.8",
|
||||||
|
"nyholm/psr7-server": "^1.0",
|
||||||
|
"phpspec/prophecy": "^1.17",
|
||||||
|
"phpspec/prophecy-phpunit": "^2.0",
|
||||||
|
"phpstan/phpstan": "^1.10",
|
||||||
|
"phpunit/phpunit": "^9.6",
|
||||||
|
"slim/http": "^1.3",
|
||||||
|
"slim/psr7": "^1.6",
|
||||||
|
"squizlabs/php_codesniffer": "^3.7"
|
||||||
},
|
},
|
||||||
"time": "2017-11-26T19:13:09+00:00",
|
"suggest": {
|
||||||
|
"ext-simplexml": "Needed to support XML format in BodyParsingMiddleware",
|
||||||
|
"ext-xml": "Needed to support XML format in BodyParsingMiddleware",
|
||||||
|
"php-di/php-di": "PHP-DI is the recommended container library to be used with Slim",
|
||||||
|
"slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information."
|
||||||
|
},
|
||||||
|
"time": "2023-07-23T04:54:29+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -425,49 +523,64 @@
|
||||||
"MIT"
|
"MIT"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
|
||||||
"name": "Rob Allen",
|
|
||||||
"email": "rob@akrabat.com",
|
|
||||||
"homepage": "http://akrabat.com"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Josh Lockhart",
|
"name": "Josh Lockhart",
|
||||||
"email": "hello@joshlockhart.com",
|
"email": "hello@joshlockhart.com",
|
||||||
"homepage": "https://joshlockhart.com"
|
"homepage": "https://joshlockhart.com"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Gabriel Manricks",
|
|
||||||
"email": "gmanricks@me.com",
|
|
||||||
"homepage": "http://gabrielmanricks.com"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Andrew Smith",
|
"name": "Andrew Smith",
|
||||||
"email": "a.smith@silentworks.co.uk",
|
"email": "a.smith@silentworks.co.uk",
|
||||||
"homepage": "http://silentworks.co.uk"
|
"homepage": "http://silentworks.co.uk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Rob Allen",
|
||||||
|
"email": "rob@akrabat.com",
|
||||||
|
"homepage": "http://akrabat.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pierre Berube",
|
||||||
|
"email": "pierre@lgse.com",
|
||||||
|
"homepage": "http://www.lgse.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gabriel Manricks",
|
||||||
|
"email": "gmanricks@me.com",
|
||||||
|
"homepage": "http://gabrielmanricks.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
||||||
"homepage": "https://slimframework.com",
|
"homepage": "https://www.slimframework.com",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"api",
|
"api",
|
||||||
"framework",
|
"framework",
|
||||||
"micro",
|
"micro",
|
||||||
"router"
|
"router"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://opencollective.com/slimphp",
|
||||||
|
"type": "open_collective"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/slim/slim",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v3.4.8",
|
"version": "v3.4.47",
|
||||||
"version_normalized": "3.4.8.0",
|
"version_normalized": "3.4.47.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/cache.git",
|
"url": "https://github.com/symfony/cache.git",
|
||||||
"reference": "13255ddd056e49f3154747943f8ee175d555d394"
|
"reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/cache/zipball/13255ddd056e49f3154747943f8ee175d555d394",
|
"url": "https://api.github.com/repos/symfony/cache/zipball/a7a14c4832760bd1fbd31be2859ffedc9b6ff813",
|
||||||
"reference": "13255ddd056e49f3154747943f8ee175d555d394",
|
"reference": "a7a14c4832760bd1fbd31be2859ffedc9b6ff813",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -486,17 +599,12 @@
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"cache/integration-tests": "dev-master",
|
"cache/integration-tests": "dev-master",
|
||||||
"doctrine/cache": "~1.6",
|
"doctrine/cache": "^1.6",
|
||||||
"doctrine/dbal": "~2.4",
|
"doctrine/dbal": "^2.4|^3.0",
|
||||||
"predis/predis": "~1.0"
|
"predis/predis": "^1.0"
|
||||||
},
|
},
|
||||||
"time": "2018-04-02T14:35:16+00:00",
|
"time": "2020-10-24T10:57:07+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.4-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -525,34 +633,44 @@
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"caching",
|
"caching",
|
||||||
"psr6"
|
"psr6"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/expression-language",
|
"name": "symfony/expression-language",
|
||||||
"version": "v3.4.8",
|
"version": "v3.4.47",
|
||||||
"version_normalized": "3.4.8.0",
|
"version_normalized": "3.4.47.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/expression-language.git",
|
"url": "https://github.com/symfony/expression-language.git",
|
||||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241"
|
"reference": "de38e66398fca1fcb9c48e80279910e6889cb28f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
"url": "https://api.github.com/repos/symfony/expression-language/zipball/de38e66398fca1fcb9c48e80279910e6889cb28f",
|
||||||
"reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241",
|
"reference": "de38e66398fca1fcb9c48e80279910e6889cb28f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9|>=7.0.8",
|
"php": "^5.5.9|>=7.0.8",
|
||||||
"symfony/cache": "~3.1|~4.0"
|
"symfony/cache": "~3.1|~4.0",
|
||||||
|
"symfony/polyfill-php70": "~1.6"
|
||||||
},
|
},
|
||||||
"time": "2018-01-03T07:37:34+00:00",
|
"time": "2020-10-24T10:57:07+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.4-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -577,41 +695,59 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Symfony ExpressionLanguage Component",
|
"description": "Symfony ExpressionLanguage Component",
|
||||||
"homepage": "https://symfony.com"
|
"homepage": "https://symfony.com",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-apcu",
|
"name": "symfony/polyfill-apcu",
|
||||||
"version": "v1.7.0",
|
"version": "v1.28.0",
|
||||||
"version_normalized": "1.7.0.0",
|
"version_normalized": "1.28.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-apcu.git",
|
"url": "https://github.com/symfony/polyfill-apcu.git",
|
||||||
"reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00"
|
"reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00",
|
"url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899",
|
||||||
"reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00",
|
"reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.3"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
"time": "2018-01-30T19:27:44+00:00",
|
"time": "2023-01-26T09:26:14+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.7-dev"
|
"dev-main": "1.28-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Apcu\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Apcu\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -635,6 +771,86 @@
|
||||||
"polyfill",
|
"polyfill",
|
||||||
"portable",
|
"portable",
|
||||||
"shim"
|
"shim"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-php70",
|
||||||
|
"version": "v1.20.0",
|
||||||
|
"version_normalized": "1.20.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-php70.git",
|
||||||
|
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
|
||||||
|
"reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1"
|
||||||
|
},
|
||||||
|
"time": "2020-10-23T14:02:19+00:00",
|
||||||
|
"type": "metapackage",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "1.20-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
composer.lock
|
|
||||||
composer.phar
|
|
||||||
/vendor/
|
|
|
@ -1,20 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013 container-interop
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -1,148 +0,0 @@
|
||||||
# Container Interoperability
|
|
||||||
|
|
||||||
[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop)
|
|
||||||
[![Total Downloads](https://poser.pugx.org/container-interop/container-interop/downloads.svg)](https://packagist.org/packages/container-interop/container-interop)
|
|
||||||
|
|
||||||
## Deprecation warning!
|
|
||||||
|
|
||||||
Starting Feb. 13th 2017, container-interop is officially deprecated in favor of [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md).
|
|
||||||
Container-interop has been the test-bed of PSR-11. From v1.2, container-interop directly extends PSR-11 interfaces.
|
|
||||||
Therefore, all containers implementing container-interop are now *de-facto* compatible with PSR-11.
|
|
||||||
|
|
||||||
- Projects implementing container-interop interfaces are encouraged to directly implement PSR-11 interfaces instead.
|
|
||||||
- Projects consuming container-interop interfaces are very strongly encouraged to directly type-hint on PSR-11 interfaces, in order to be compatible with PSR-11 containers that are not compatible with container-interop.
|
|
||||||
|
|
||||||
Regarding the delegate lookup feature, that is present in container-interop and not in PSR-11, the feature is actually a design pattern. It is therefore not deprecated. Documentation regarding this design pattern will be migrated from this repository into a separate website in the future.
|
|
||||||
|
|
||||||
## About
|
|
||||||
|
|
||||||
*container-interop* tries to identify and standardize features in *container* objects (service locators,
|
|
||||||
dependency injection containers, etc.) to achieve interoperability.
|
|
||||||
|
|
||||||
Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations.
|
|
||||||
|
|
||||||
If PHP projects that provide container implementations begin to adopt these common standards, then PHP
|
|
||||||
applications and projects that use containers can depend on the common interfaces instead of specific
|
|
||||||
implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume
|
|
||||||
*any* container implementation that can be adapted to these interfaces.
|
|
||||||
|
|
||||||
The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being
|
|
||||||
worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope
|
|
||||||
this project will pave the way for one or more future PSRs.
|
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
You can install this package through Composer:
|
|
||||||
|
|
||||||
```json
|
|
||||||
composer require container-interop/container-interop
|
|
||||||
```
|
|
||||||
|
|
||||||
The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility
|
|
||||||
between minor versions.
|
|
||||||
|
|
||||||
## Standards
|
|
||||||
|
|
||||||
### Available
|
|
||||||
|
|
||||||
- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php).
|
|
||||||
[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md).
|
|
||||||
Describes the interface of a container that exposes methods to read its entries.
|
|
||||||
- [*Delegate lookup feature*](docs/Delegate-lookup.md).
|
|
||||||
[Meta Document](docs/Delegate-lookup-meta.md).
|
|
||||||
Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This
|
|
||||||
feature lets several containers work together in a single application.
|
|
||||||
|
|
||||||
### Proposed
|
|
||||||
|
|
||||||
View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC)
|
|
||||||
|
|
||||||
## Compatible projects
|
|
||||||
|
|
||||||
### Projects implementing `ContainerInterface`
|
|
||||||
|
|
||||||
- [Acclimate](https://github.com/jeremeamia/acclimate-container): Adapters for
|
|
||||||
Aura.Di, Laravel, Nette DI, Pimple, Symfony DI, ZF2 Service manager, ZF2
|
|
||||||
Dependency injection and any container using `ArrayAccess`
|
|
||||||
- [Aura.Di](https://github.com/auraphp/Aura.Di)
|
|
||||||
- [auryn-container-interop](https://github.com/elazar/auryn-container-interop)
|
|
||||||
- [Burlap](https://github.com/codeeverything/burlap)
|
|
||||||
- [Chernozem](https://github.com/pyrsmk/Chernozem)
|
|
||||||
- [Data Manager](https://github.com/chrismichaels84/data-manager)
|
|
||||||
- [Disco](https://github.com/bitexpert/disco)
|
|
||||||
- [InDI](https://github.com/idealogica/indi)
|
|
||||||
- [League/Container](http://container.thephpleague.com/)
|
|
||||||
- [Mouf](http://mouf-php.com)
|
|
||||||
- [Njasm Container](https://github.com/njasm/container)
|
|
||||||
- [PHP-DI](http://php-di.org)
|
|
||||||
- [Picotainer](https://github.com/thecodingmachine/picotainer)
|
|
||||||
- [PimpleInterop](https://github.com/moufmouf/pimple-interop)
|
|
||||||
- [Pimple3-ContainerInterop](https://github.com/Sam-Burns/pimple3-containerinterop) (using Pimple v3)
|
|
||||||
- [SitePoint Container](https://github.com/sitepoint/Container)
|
|
||||||
- [Thruster Container](https://github.com/ThrusterIO/container) (PHP7 only)
|
|
||||||
- [Ultra-Lite Container](https://github.com/ultra-lite/container)
|
|
||||||
- [Unbox](https://github.com/mindplay-dk/unbox)
|
|
||||||
- [XStatic](https://github.com/jeremeamia/xstatic)
|
|
||||||
- [Zend\ServiceManager](https://github.com/zendframework/zend-servicemanager)
|
|
||||||
- [Zit](https://github.com/inxilpro/Zit)
|
|
||||||
|
|
||||||
### Projects implementing the *delegate lookup* feature
|
|
||||||
|
|
||||||
- [Aura.Di](https://github.com/auraphp/Aura.Di)
|
|
||||||
- [Burlap](https://github.com/codeeverything/burlap)
|
|
||||||
- [Chernozem](https://github.com/pyrsmk/Chernozem)
|
|
||||||
- [InDI](https://github.com/idealogica/indi)
|
|
||||||
- [League/Container](http://container.thephpleague.com/)
|
|
||||||
- [Mouf](http://mouf-php.com)
|
|
||||||
- [Picotainer](https://github.com/thecodingmachine/picotainer)
|
|
||||||
- [PHP-DI](http://php-di.org)
|
|
||||||
- [PimpleInterop](https://github.com/moufmouf/pimple-interop)
|
|
||||||
- [Ultra-Lite Container](https://github.com/ultra-lite/container)
|
|
||||||
|
|
||||||
### Middlewares implementing `ContainerInterface`
|
|
||||||
|
|
||||||
- [Alias-Container](https://github.com/thecodingmachine/alias-container): add
|
|
||||||
aliases support to any container
|
|
||||||
- [Prefixer-Container](https://github.com/thecodingmachine/prefixer-container):
|
|
||||||
dynamically prefix identifiers
|
|
||||||
- [Lazy-Container](https://github.com/snapshotpl/lazy-container): lazy services
|
|
||||||
|
|
||||||
### Projects using `ContainerInterface`
|
|
||||||
|
|
||||||
The list below contains only a sample of all the projects consuming `ContainerInterface`. For a more complete list have a look [here](http://packanalyst.com/class?q=Interop%5CContainer%5CContainerInterface).
|
|
||||||
|
|
||||||
| | Downloads |
|
|
||||||
| --- | --- |
|
|
||||||
| [Adroit](https://github.com/bitexpert/adroit) | ![](https://img.shields.io/packagist/dt/bitexpert/adroit.svg) |
|
|
||||||
| [Behat](https://github.com/Behat/Behat/pull/974) | ![](https://img.shields.io/packagist/dt/behat/behat.svg) |
|
|
||||||
| [blast-facades](https://github.com/phpthinktank/blast-facades): Minimize complexity and represent dependencies as facades. | ![](https://img.shields.io/packagist/dt/blast/facades.svg) |
|
|
||||||
| [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di): an extension to [Silex](http://silex.sensiolabs.org/) that adds support for any *container-interop* compatible container | ![](https://img.shields.io/packagist/dt/mouf/interop.silex.di.svg) |
|
|
||||||
| [mindplay/walkway](https://github.com/mindplay-dk/walkway): a modular request router | ![](https://img.shields.io/packagist/dt/mindplay/walkway.svg) |
|
|
||||||
| [mindplay/middleman](https://github.com/mindplay-dk/middleman): minimalist PSR-7 middleware dispatcher | ![](https://img.shields.io/packagist/dt/mindplay/middleman.svg) |
|
|
||||||
| [PHP-DI/Invoker](https://github.com/PHP-DI/Invoker): extensible and configurable invoker/dispatcher | ![](https://img.shields.io/packagist/dt/php-di/invoker.svg) |
|
|
||||||
| [Prophiler](https://github.com/fabfuel/prophiler) | ![](https://img.shields.io/packagist/dt/fabfuel/prophiler.svg) |
|
|
||||||
| [Silly](https://github.com/mnapoli/silly): CLI micro-framework | ![](https://img.shields.io/packagist/dt/mnapoli/silly.svg) |
|
|
||||||
| [Slim v3](https://github.com/slimphp/Slim) | ![](https://img.shields.io/packagist/dt/slim/slim.svg) |
|
|
||||||
| [Splash](http://mouf-php.com/packages/mouf/mvc.splash-common/version/8.0-dev/README.md) | ![](https://img.shields.io/packagist/dt/mouf/mvc.splash-common.svg) |
|
|
||||||
| [Woohoo Labs. Harmony](https://github.com/woohoolabs/harmony): a flexible micro-framework | ![](https://img.shields.io/packagist/dt/woohoolabs/harmony.svg) |
|
|
||||||
| [zend-expressive](https://github.com/zendframework/zend-expressive) | ![](https://img.shields.io/packagist/dt/zendframework/zend-expressive.svg) |
|
|
||||||
|
|
||||||
|
|
||||||
## Workflow
|
|
||||||
|
|
||||||
Everyone is welcome to join and contribute.
|
|
||||||
|
|
||||||
The general workflow looks like this:
|
|
||||||
|
|
||||||
1. Someone opens a discussion (GitHub issue) to suggest an interface
|
|
||||||
1. Feedback is gathered
|
|
||||||
1. The interface is added to a development branch
|
|
||||||
1. We release alpha versions so that the interface can be experimented with
|
|
||||||
1. Discussions and edits ensue until the interface is deemed stable by a general consensus
|
|
||||||
1. A new minor version of the package is released
|
|
||||||
|
|
||||||
We try to not break BC by creating new interfaces instead of editing existing ones.
|
|
||||||
|
|
||||||
While we currently work on interfaces, we are open to anything that might help towards interoperability, may that
|
|
||||||
be code, best practices, etc.
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"name": "container-interop/container-interop",
|
|
||||||
"type": "library",
|
|
||||||
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
|
||||||
"homepage": "https://github.com/container-interop/container-interop",
|
|
||||||
"license": "MIT",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Interop\\Container\\": "src/Interop/Container/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,114 +0,0 @@
|
||||||
# ContainerInterface Meta Document
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
This document describes the process and discussions that lead to the `ContainerInterface`.
|
|
||||||
Its goal is to explain the reasons behind each decision.
|
|
||||||
|
|
||||||
## Goal
|
|
||||||
|
|
||||||
The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a
|
|
||||||
container to obtain objects and parameters.
|
|
||||||
|
|
||||||
By standardizing such a behavior, frameworks and libraries using the `ContainerInterface`
|
|
||||||
could work with any compatible container.
|
|
||||||
That would allow end users to choose their own container based on their own preferences.
|
|
||||||
|
|
||||||
It is important to distinguish the two usages of a container:
|
|
||||||
|
|
||||||
- configuring entries
|
|
||||||
- fetching entries
|
|
||||||
|
|
||||||
Most of the time, those two sides are not used by the same party.
|
|
||||||
While it is often end users who tend to configure entries, it is generally the framework that fetch
|
|
||||||
entries to build the application.
|
|
||||||
|
|
||||||
This is why this interface focuses only on how entries can be fetched from a container.
|
|
||||||
|
|
||||||
## Interface name
|
|
||||||
|
|
||||||
The interface name has been thoroughly discussed and was decided by a vote.
|
|
||||||
|
|
||||||
The list of options considered with their respective votes are:
|
|
||||||
|
|
||||||
- `ContainerInterface`: +8
|
|
||||||
- `ProviderInterface`: +2
|
|
||||||
- `LocatorInterface`: 0
|
|
||||||
- `ReadableContainerInterface`: -5
|
|
||||||
- `ServiceLocatorInterface`: -6
|
|
||||||
- `ObjectFactory`: -6
|
|
||||||
- `ObjectStore`: -8
|
|
||||||
- `ConsumerInterface`: -9
|
|
||||||
|
|
||||||
[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote)
|
|
||||||
|
|
||||||
The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1).
|
|
||||||
|
|
||||||
## Interface methods
|
|
||||||
|
|
||||||
The choice of which methods the interface would contain was made after a statistical analysis of existing containers.
|
|
||||||
The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681).
|
|
||||||
|
|
||||||
The summary of the analysis showed that:
|
|
||||||
|
|
||||||
- all containers offer a method to get an entry by its id
|
|
||||||
- a large majority name such method `get()`
|
|
||||||
- for all containers, the `get()` method has 1 mandatory parameter of type string
|
|
||||||
- some containers have an optional additional argument for `get()`, but it doesn't have the same purpose between containers
|
|
||||||
- a large majority of the containers offer a method to test if it can return an entry by its id
|
|
||||||
- a majority name such method `has()`
|
|
||||||
- for all containers offering `has()`, the method has exactly 1 parameter of type string
|
|
||||||
- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()`
|
|
||||||
- a large majority of the containers don't implement `ArrayAccess`
|
|
||||||
|
|
||||||
The question of whether to include methods to define entries has been discussed in
|
|
||||||
[issue #1](https://github.com/container-interop/container-interop/issues/1).
|
|
||||||
It has been judged that such methods do not belong in the interface described here because it is out of its scope
|
|
||||||
(see the "Goal" section).
|
|
||||||
|
|
||||||
As a result, the `ContainerInterface` contains two methods:
|
|
||||||
|
|
||||||
- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found.
|
|
||||||
- `has()`, returning a boolean, with one mandatory string parameter.
|
|
||||||
|
|
||||||
### Number of parameters in `get()` method
|
|
||||||
|
|
||||||
While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with
|
|
||||||
existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters
|
|
||||||
as long as they are optional, because the implementation *does* satisfy the interface.
|
|
||||||
|
|
||||||
This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6).
|
|
||||||
|
|
||||||
### Type of the `$id` parameter
|
|
||||||
|
|
||||||
The type of the `$id` parameter in `get()` and `has()` has been discussed in
|
|
||||||
[issue #6](https://github.com/container-interop/container-interop/issues/6).
|
|
||||||
While `string` is used in all the containers that were analyzed, it was suggested that allowing
|
|
||||||
anything (such as objects) could allow containers to offer a more advanced query API.
|
|
||||||
|
|
||||||
An example given was to use the container as an object builder. The `$id` parameter would then be an
|
|
||||||
object that would describe how to create an instance.
|
|
||||||
|
|
||||||
The conclusion of the discussion was that this was beyond the scope of getting entries from a container without
|
|
||||||
knowing how the container provided them, and it was more fit for a factory.
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
Are listed here all people that contributed in the discussions or votes, by alphabetical order:
|
|
||||||
|
|
||||||
- [Amy Stephen](https://github.com/AmyStephen)
|
|
||||||
- [David Négrier](https://github.com/moufmouf)
|
|
||||||
- [Don Gilbert](https://github.com/dongilbert)
|
|
||||||
- [Jason Judge](https://github.com/judgej)
|
|
||||||
- [Jeremy Lindblom](https://github.com/jeremeamia)
|
|
||||||
- [Marco Pivetta](https://github.com/Ocramius)
|
|
||||||
- [Matthieu Napoli](https://github.com/mnapoli)
|
|
||||||
- [Paul M. Jones](https://github.com/pmjones)
|
|
||||||
- [Stephan Hochdörfer](https://github.com/shochdoerfer)
|
|
||||||
- [Taylor Otwell](https://github.com/taylorotwell)
|
|
||||||
|
|
||||||
## Relevant links
|
|
||||||
|
|
||||||
- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php)
|
|
||||||
- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed)
|
|
||||||
- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote)
|
|
|
@ -1,158 +0,0 @@
|
||||||
Container interface
|
|
||||||
===================
|
|
||||||
|
|
||||||
This document describes a common interface for dependency injection containers.
|
|
||||||
|
|
||||||
The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a
|
|
||||||
container to obtain objects and parameters (called *entries* in the rest of this document).
|
|
||||||
|
|
||||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
|
||||||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
|
||||||
interpreted as described in [RFC 2119][].
|
|
||||||
|
|
||||||
The word `implementor` in this document is to be interpreted as someone
|
|
||||||
implementing the `ContainerInterface` in a dependency injection-related library or framework.
|
|
||||||
Users of dependency injections containers (DIC) are referred to as `user`.
|
|
||||||
|
|
||||||
[RFC 2119]: http://tools.ietf.org/html/rfc2119
|
|
||||||
|
|
||||||
1. Specification
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
### 1.1 Basics
|
|
||||||
|
|
||||||
- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`.
|
|
||||||
|
|
||||||
- `get` takes one mandatory parameter: an entry identifier. It MUST be a string.
|
|
||||||
A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier
|
|
||||||
is not known to the container. Two successive calls to `get` with the same
|
|
||||||
identifier SHOULD return the same value. However, depending on the `implementor`
|
|
||||||
design and/or `user` configuration, different values might be returned, so
|
|
||||||
`user` SHOULD NOT rely on getting the same value on 2 successive calls.
|
|
||||||
While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations
|
|
||||||
MAY accept additional optional parameters.
|
|
||||||
|
|
||||||
- `has` takes one unique parameter: an entry identifier. It MUST return `true`
|
|
||||||
if an entry identifier is known to the container and `false` if it is not.
|
|
||||||
`has($id)` returning true does not mean that `get($id)` will not throw an exception.
|
|
||||||
It does however mean that `get($id)` will not throw a `NotFoundException`.
|
|
||||||
|
|
||||||
### 1.2 Exceptions
|
|
||||||
|
|
||||||
Exceptions directly thrown by the container MUST implement the
|
|
||||||
[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php).
|
|
||||||
|
|
||||||
A call to the `get` method with a non-existing id SHOULD throw a
|
|
||||||
[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php).
|
|
||||||
|
|
||||||
### 1.3 Additional features
|
|
||||||
|
|
||||||
This section describes additional features that MAY be added to a container. Containers are not
|
|
||||||
required to implement these features to respect the ContainerInterface.
|
|
||||||
|
|
||||||
#### 1.3.1 Delegate lookup feature
|
|
||||||
|
|
||||||
The goal of the *delegate lookup* feature is to allow several containers to share entries.
|
|
||||||
Containers implementing this feature can perform dependency lookups in other containers.
|
|
||||||
|
|
||||||
Containers implementing this feature will offer a greater lever of interoperability
|
|
||||||
with other containers. Implementation of this feature is therefore RECOMMENDED.
|
|
||||||
|
|
||||||
A container implementing this feature:
|
|
||||||
|
|
||||||
- MUST implement the `ContainerInterface`
|
|
||||||
- MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
|
|
||||||
or any possible way). The delegate container MUST implement the `ContainerInterface`.
|
|
||||||
|
|
||||||
When a container is configured to use a delegate container for dependencies:
|
|
||||||
|
|
||||||
- Calls to the `get` method should only return an entry if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, an exception should be thrown
|
|
||||||
(as requested by the `ContainerInterface`).
|
|
||||||
- Calls to the `has` method should only return `true` if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, `false` should be returned.
|
|
||||||
- If the fetched entry has dependencies, **instead** of performing
|
|
||||||
the dependency lookup in the container, the lookup is performed on the *delegate container*.
|
|
||||||
|
|
||||||
Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
|
|
||||||
|
|
||||||
It is however allowed for containers to provide exception cases for special entries, and a way to lookup
|
|
||||||
into the same container (or another container) instead of the delegate container.
|
|
||||||
|
|
||||||
2. Package
|
|
||||||
----------
|
|
||||||
|
|
||||||
The interfaces and classes described as well as relevant exception are provided as part of the
|
|
||||||
[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package.
|
|
||||||
|
|
||||||
3. `Interop\Container\ContainerInterface`
|
|
||||||
-----------------------------------------
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
namespace Interop\Container;
|
|
||||||
|
|
||||||
use Interop\Container\Exception\ContainerException;
|
|
||||||
use Interop\Container\Exception\NotFoundException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes the interface of a container that exposes methods to read its entries.
|
|
||||||
*/
|
|
||||||
interface ContainerInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Finds an entry of the container by its identifier and returns it.
|
|
||||||
*
|
|
||||||
* @param string $id Identifier of the entry to look for.
|
|
||||||
*
|
|
||||||
* @throws NotFoundException No entry was found for this identifier.
|
|
||||||
* @throws ContainerException Error while retrieving the entry.
|
|
||||||
*
|
|
||||||
* @return mixed Entry.
|
|
||||||
*/
|
|
||||||
public function get($id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the container can return an entry for the given identifier.
|
|
||||||
* Returns false otherwise.
|
|
||||||
*
|
|
||||||
* `has($id)` returning true does not mean that `get($id)` will not throw an exception.
|
|
||||||
* It does however mean that `get($id)` will not throw a `NotFoundException`.
|
|
||||||
*
|
|
||||||
* @param string $id Identifier of the entry to look for.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function has($id);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
4. `Interop\Container\Exception\ContainerException`
|
|
||||||
---------------------------------------------------
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
namespace Interop\Container\Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base interface representing a generic exception in a container.
|
|
||||||
*/
|
|
||||||
interface ContainerException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
5. `Interop\Container\Exception\NotFoundException`
|
|
||||||
---------------------------------------------------
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
namespace Interop\Container\Exception;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No entry was found in the container.
|
|
||||||
*/
|
|
||||||
interface NotFoundException extends ContainerException
|
|
||||||
{
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -1,259 +0,0 @@
|
||||||
Delegate lookup feature Meta Document
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
1. Summary
|
|
||||||
----------
|
|
||||||
|
|
||||||
This document describes the *delegate lookup feature*.
|
|
||||||
Containers are not required to implement this feature to respect the `ContainerInterface`.
|
|
||||||
However, containers implementing this feature will offer a greater lever of interoperability
|
|
||||||
with other containers, allowing multiple containers to share entries in the same application.
|
|
||||||
Implementation of this feature is therefore recommanded.
|
|
||||||
|
|
||||||
2. Why Bother?
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The [`ContainerInterface`](../src/Interop/Container/ContainerInterface.php) ([meta doc](ContainerInterface.md))
|
|
||||||
standardizes how frameworks and libraries make use of a container to obtain objects and parameters.
|
|
||||||
|
|
||||||
By standardizing such a behavior, frameworks and libraries relying on the `ContainerInterface`
|
|
||||||
could work with any compatible container.
|
|
||||||
That would allow end users to choose their own container based on their own preferences.
|
|
||||||
|
|
||||||
The `ContainerInterface` is also enough if we want to have several containers side-by-side in the same
|
|
||||||
application. For instance, this is what the [CompositeContainer](https://github.com/jeremeamia/acclimate-container/blob/master/src/CompositeContainer.php)
|
|
||||||
class of [Acclimate](https://github.com/jeremeamia/acclimate-container) is designed for:
|
|
||||||
|
|
||||||
![Side by side containers](images/side_by_side_containers.png)
|
|
||||||
|
|
||||||
However, an instance in container 1 cannot reference an instance in container 2.
|
|
||||||
|
|
||||||
It would be better if an instance of container 1 could reference an instance in container 2,
|
|
||||||
and the opposite should be true.
|
|
||||||
|
|
||||||
![Interoperating containers](images/interoperating_containers.png)
|
|
||||||
|
|
||||||
In the sample above, entry 1 in container 1 is referencing entry 3 in container 2.
|
|
||||||
|
|
||||||
3. Scope
|
|
||||||
--------
|
|
||||||
|
|
||||||
### 3.1 Goals
|
|
||||||
|
|
||||||
The goal of the *delegate lookup* feature is to allow several containers to share entries.
|
|
||||||
|
|
||||||
4. Approaches
|
|
||||||
-------------
|
|
||||||
|
|
||||||
### 4.1 Chosen Approach
|
|
||||||
|
|
||||||
Containers implementing this feature can perform dependency lookups in other containers.
|
|
||||||
|
|
||||||
A container implementing this feature:
|
|
||||||
|
|
||||||
- must implement the `ContainerInterface`
|
|
||||||
- must provide a way to register a *delegate container* (using a constructor parameter, or a setter, or any
|
|
||||||
possible way). The *delegate container* must implement the `ContainerInterface`.
|
|
||||||
|
|
||||||
When a *delegate container* is configured on a container:
|
|
||||||
|
|
||||||
- Calls to the `get` method should only return an entry if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, an exception should be thrown (as required in the `ContainerInterface`).
|
|
||||||
- Calls to the `has` method should only return *true* if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, *false* should be returned.
|
|
||||||
- Finally, the important part: if the entry we are fetching has dependencies,
|
|
||||||
**instead** of perfoming the dependency lookup in the container, the lookup is performed on the *delegate container*.
|
|
||||||
|
|
||||||
Important! By default, the lookup should be performed on the delegate container **only**, not on the container itself.
|
|
||||||
|
|
||||||
It is however allowed for containers to provide exception cases for special entries, and a way to lookup into
|
|
||||||
the same container (or another container) instead of the delegate container.
|
|
||||||
|
|
||||||
### 4.2 Typical usage
|
|
||||||
|
|
||||||
The *delegate container* will usually be a composite container. A composite container is a container that
|
|
||||||
contains several other containers. When performing a lookup on a composite container, the inner containers are
|
|
||||||
queried until one container returns an entry.
|
|
||||||
An inner container implementing the *delegate lookup feature* will return entries it contains, but if these
|
|
||||||
entries have dependencies, the dependencies lookup calls will be performed on the composite container, giving
|
|
||||||
a chance to all containers to answer.
|
|
||||||
|
|
||||||
Interestingly enough, the order in which containers are added in the composite container matters. Indeed,
|
|
||||||
the first containers to be added in the composite container can "override" the entries of containers with
|
|
||||||
lower priority.
|
|
||||||
|
|
||||||
![Containers priority](images/priority.png)
|
|
||||||
|
|
||||||
In the example above, "container 2" contains a controller "myController" and the controller is referencing an
|
|
||||||
"entityManager" entry. "Container 1" contains also an entry named "entityManager".
|
|
||||||
Without the *delegate lookup* feature, when requesting the "myController" instance to container 2, it would take
|
|
||||||
in charge the instanciation of both entries.
|
|
||||||
|
|
||||||
However, using the *delegate lookup* feature, here is what happens when we ask the composite container for the
|
|
||||||
"myController" instance:
|
|
||||||
|
|
||||||
- The composite container asks container 1 if if contains the "myController" instance. The answer is no.
|
|
||||||
- The composite container asks container 2 if if contains the "myController" instance. The answer is yes.
|
|
||||||
- The composite container performs a `get` call on container 2 for the "myController" instance.
|
|
||||||
- Container 2 sees that "myController" has a dependency on "entityManager".
|
|
||||||
- Container 2 delegates the lookup of "entityManager" to the composite container.
|
|
||||||
- The composite container asks container 1 if if contains the "entityManager" instance. The answer is yes.
|
|
||||||
- The composite container performs a `get` call on container 1 for the "entityManager" instance.
|
|
||||||
|
|
||||||
In the end, we get a controller instanciated by container 2 that references an entityManager instanciated
|
|
||||||
by container 1.
|
|
||||||
|
|
||||||
### 4.3 Alternative: the fallback strategy
|
|
||||||
|
|
||||||
The first proposed approach we tried was to perform all the lookups in the "local" container,
|
|
||||||
and if a lookup fails in the container, to use the delegate container. In this scenario, the
|
|
||||||
delegate container is used in "fallback" mode.
|
|
||||||
|
|
||||||
This strategy has been described in @moufmouf blog post: http://mouf-php.com/container-interop-whats-next (solution 1).
|
|
||||||
It was also discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-33570697) and
|
|
||||||
[here](https://github.com/container-interop/container-interop/pull/20#issuecomment-56599631).
|
|
||||||
|
|
||||||
Problems with this strategy:
|
|
||||||
|
|
||||||
- Heavy problem regarding infinite loops
|
|
||||||
- Unable to overload a container entry with the delegate container entry
|
|
||||||
|
|
||||||
### 4.4 Alternative: force implementing an interface
|
|
||||||
|
|
||||||
The first proposed approach was to develop a `ParentAwareContainerInterface` interface.
|
|
||||||
It was proposed here: https://github.com/container-interop/container-interop/pull/8
|
|
||||||
|
|
||||||
The interface would have had the behaviour of the delegate lookup feature but would have forced the addition of
|
|
||||||
a `setParentContainter` method:
|
|
||||||
|
|
||||||
```php
|
|
||||||
interface ParentAwareContainerInterface extends ReadableContainerInterface {
|
|
||||||
/**
|
|
||||||
* Sets the parent container associated to that container. This container will call
|
|
||||||
* the parent container to fetch dependencies.
|
|
||||||
*
|
|
||||||
* @param ContainerInterface $container
|
|
||||||
*/
|
|
||||||
public function setParentContainer(ContainerInterface $container);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The interface idea was first questioned by @Ocramius [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777).
|
|
||||||
@Ocramius expressed the idea that an interface should not contain setters, otherwise, it is forcing implementation
|
|
||||||
details on the class implementing the interface.
|
|
||||||
Then @mnapoli made a proposal for a "convention" [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51841079),
|
|
||||||
this idea was further discussed until all participants in the discussion agreed to remove the interface idea
|
|
||||||
and replace it with a "standard" feature.
|
|
||||||
|
|
||||||
**Pros:**
|
|
||||||
|
|
||||||
If we had had an interface, we could have delegated the registration of the delegate/composite container to the
|
|
||||||
the delegate/composite container itself.
|
|
||||||
For instance:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$containerA = new ContainerA();
|
|
||||||
$containerB = new ContainerB();
|
|
||||||
|
|
||||||
$compositeContainer = new CompositeContainer([$containerA, $containerB]);
|
|
||||||
|
|
||||||
// The call to 'setParentContainer' is delegated to the CompositeContainer
|
|
||||||
// It is not the responsibility of the user anymore.
|
|
||||||
class CompositeContainer {
|
|
||||||
...
|
|
||||||
|
|
||||||
public function __construct($containers) {
|
|
||||||
foreach ($containers as $container) {
|
|
||||||
if ($container instanceof ParentAwareContainerInterface) {
|
|
||||||
$container->setParentContainer($this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
**Cons:**
|
|
||||||
|
|
||||||
Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777).
|
|
||||||
Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments,
|
|
||||||
and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface.
|
|
||||||
|
|
||||||
### 4.4 Alternative: no exception case for delegate lookups
|
|
||||||
|
|
||||||
Originally, the proposed wording for delegate lookup calls was:
|
|
||||||
|
|
||||||
> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself.
|
|
||||||
|
|
||||||
This was later replaced by:
|
|
||||||
|
|
||||||
> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
|
|
||||||
>
|
|
||||||
> It is however allowed for containers to provide exception cases for special entries, and a way to lookup
|
|
||||||
> into the same container (or another container) instead of the delegate container.
|
|
||||||
|
|
||||||
Exception cases have been allowed to avoid breaking dependencies with some services that must be provided
|
|
||||||
by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235
|
|
||||||
|
|
||||||
### 4.5 Alternative: having one of the containers act as the composite container
|
|
||||||
|
|
||||||
In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to
|
|
||||||
add another DI container to this container. Most of the time, the "big" framework will be responsible for
|
|
||||||
creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted,
|
|
||||||
the "big" framework will not be aware of the existence of a composite container that it should use instead
|
|
||||||
of its own container.
|
|
||||||
|
|
||||||
For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container
|
|
||||||
to make it act as a composite container.
|
|
||||||
|
|
||||||
This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194)
|
|
||||||
and [here](http://mouf-php.com/container-interop-whats-next#solution4).
|
|
||||||
|
|
||||||
This was implemented in Symfony 2 using:
|
|
||||||
|
|
||||||
- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0)
|
|
||||||
- [framework interop](https://github.com/mnapoli/framework-interop/)
|
|
||||||
|
|
||||||
This was implemented in Silex using:
|
|
||||||
|
|
||||||
- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di)
|
|
||||||
|
|
||||||
Having a container act as the composite container is not part of the delegate lookup standard because it is
|
|
||||||
simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop
|
|
||||||
play nice with other DI containers.
|
|
||||||
|
|
||||||
|
|
||||||
5. Implementations
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The following projects already implement the delegate lookup feature:
|
|
||||||
|
|
||||||
- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120)
|
|
||||||
- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72)
|
|
||||||
- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62)
|
|
||||||
|
|
||||||
6. People
|
|
||||||
---------
|
|
||||||
|
|
||||||
Are listed here all people that contributed in the discussions, by alphabetical order:
|
|
||||||
|
|
||||||
- [Alexandru Pătrănescu](https://github.com/drealecs)
|
|
||||||
- [Ben Peachey](https://github.com/potherca)
|
|
||||||
- [David Négrier](https://github.com/moufmouf)
|
|
||||||
- [Jeremy Lindblom](https://github.com/jeremeamia)
|
|
||||||
- [Marco Pivetta](https://github.com/Ocramius)
|
|
||||||
- [Matthieu Napoli](https://github.com/mnapoli)
|
|
||||||
- [Nelson J Morais](https://github.com/njasm)
|
|
||||||
- [Phil Sturgeon](https://github.com/philsturgeon)
|
|
||||||
- [Stephan Hochdörfer](https://github.com/shochdoerfer)
|
|
||||||
|
|
||||||
7. Relevant Links
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
_**Note:** Order descending chronologically._
|
|
||||||
|
|
||||||
- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20)
|
|
||||||
- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8)
|
|
||||||
- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next)
|
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
Delegate lookup feature
|
|
||||||
=======================
|
|
||||||
|
|
||||||
This document describes a standard for dependency injection containers.
|
|
||||||
|
|
||||||
The goal set by the *delegate lookup* feature is to allow several containers to share entries.
|
|
||||||
Containers implementing this feature can perform dependency lookups in other containers.
|
|
||||||
|
|
||||||
Containers implementing this feature will offer a greater lever of interoperability
|
|
||||||
with other containers. Implementation of this feature is therefore RECOMMENDED.
|
|
||||||
|
|
||||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
|
||||||
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
|
||||||
interpreted as described in [RFC 2119][].
|
|
||||||
|
|
||||||
The word `implementor` in this document is to be interpreted as someone
|
|
||||||
implementing the delegate lookup feature in a dependency injection-related library or framework.
|
|
||||||
Users of dependency injections containers (DIC) are referred to as `user`.
|
|
||||||
|
|
||||||
[RFC 2119]: http://tools.ietf.org/html/rfc2119
|
|
||||||
|
|
||||||
1. Vocabulary
|
|
||||||
-------------
|
|
||||||
|
|
||||||
In a dependency injection container, the container is used to fetch entries.
|
|
||||||
Entries can have dependencies on other entries. Usually, these other entries are fetched by the container.
|
|
||||||
|
|
||||||
The *delegate lookup* feature is the ability for a container to fetch dependencies in
|
|
||||||
another container. In the rest of the document, the word "container" will reference the container
|
|
||||||
implemented by the implementor. The word "delegate container" will reference the container we are
|
|
||||||
fetching the dependencies from.
|
|
||||||
|
|
||||||
2. Specification
|
|
||||||
----------------
|
|
||||||
|
|
||||||
A container implementing the *delegate lookup* feature:
|
|
||||||
|
|
||||||
- MUST implement the [`ContainerInterface`](ContainerInterface.md)
|
|
||||||
- MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
|
|
||||||
or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md).
|
|
||||||
|
|
||||||
When a container is configured to use a delegate container for dependencies:
|
|
||||||
|
|
||||||
- Calls to the `get` method should only return an entry if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, an exception should be thrown
|
|
||||||
(as requested by the [`ContainerInterface`](ContainerInterface.md)).
|
|
||||||
- Calls to the `has` method should only return `true` if the entry is part of the container.
|
|
||||||
If the entry is not part of the container, `false` should be returned.
|
|
||||||
- If the fetched entry has dependencies, **instead** of performing
|
|
||||||
the dependency lookup in the container, the lookup is performed on the *delegate container*.
|
|
||||||
|
|
||||||
Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself.
|
|
||||||
|
|
||||||
It is however allowed for containers to provide exception cases for special entries, and a way to lookup
|
|
||||||
into the same container (or another container) instead of the delegate container.
|
|
||||||
|
|
||||||
3. Package / Interface
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
This feature is not tied to any code, interface or package.
|
|
Binary file not shown.
Before Width: | Height: | Size: 25 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
Before Width: | Height: | Size: 16 KiB |
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Interop\Container;
|
|
||||||
|
|
||||||
use Psr\Container\ContainerInterface as PsrContainerInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Describes the interface of a container that exposes methods to read its entries.
|
|
||||||
*/
|
|
||||||
interface ContainerInterface extends PsrContainerInterface
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Interop\Container\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\ContainerExceptionInterface as PsrContainerException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base interface representing a generic exception in a container.
|
|
||||||
*/
|
|
||||||
interface ContainerException extends PsrContainerException
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Interop\Container\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\NotFoundExceptionInterface as PsrNotFoundException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* No entry was found in the container.
|
|
||||||
*/
|
|
||||||
interface NotFoundException extends ContainerException, PsrNotFoundException
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
phpunit.xml
|
|
||||||
composer.lock
|
|
||||||
/vendor/
|
|
|
@ -1,40 +0,0 @@
|
||||||
language: php
|
|
||||||
|
|
||||||
env:
|
|
||||||
matrix:
|
|
||||||
- PIMPLE_EXT=no
|
|
||||||
- PIMPLE_EXT=yes
|
|
||||||
global:
|
|
||||||
- REPORT_EXIT_STATUS=1
|
|
||||||
|
|
||||||
php:
|
|
||||||
- 5.3
|
|
||||||
- 5.4
|
|
||||||
- 5.5
|
|
||||||
- 5.6
|
|
||||||
- 7.0
|
|
||||||
- 7.1
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- composer self-update
|
|
||||||
- COMPOSER_ROOT_VERSION=dev-master composer install
|
|
||||||
- if [ "$PIMPLE_EXT" == "yes" ]; then sh -c "cd ext/pimple && phpize && ./configure && make && sudo make install"; fi
|
|
||||||
- if [ "$PIMPLE_EXT" == "yes" ]; then echo "extension=pimple.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cd ext/pimple
|
|
||||||
- if [ "$PIMPLE_EXT" == "yes" ]; then yes n | make test | tee output ; grep -E 'Tests failed +. +0' output; fi
|
|
||||||
- if [ "$PIMPLE_EXT" == "yes" ]; then export SYMFONY_DEPRECATIONS_HELPER=weak; fi
|
|
||||||
- cd ../..
|
|
||||||
- ./vendor/bin/simple-phpunit
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- php: hhvm
|
|
||||||
dist: trusty
|
|
||||||
env: PIMPLE_EXT=no
|
|
||||||
exclude:
|
|
||||||
- php: 7.0
|
|
||||||
env: PIMPLE_EXT=yes
|
|
||||||
- php: 7.1
|
|
||||||
env: PIMPLE_EXT=yes
|
|
|
@ -1,59 +0,0 @@
|
||||||
* 3.2.3 (2017-XX-XX)
|
|
||||||
|
|
||||||
* n/a
|
|
||||||
|
|
||||||
* 3.2.2 (2017-07-23)
|
|
||||||
|
|
||||||
* reverted extending a protected closure throws an exception (deprecated it instead)
|
|
||||||
|
|
||||||
* 3.2.1 (2017-07-17)
|
|
||||||
|
|
||||||
* fixed PHP error
|
|
||||||
|
|
||||||
* 3.2.0 (2017-07-17)
|
|
||||||
|
|
||||||
* added a PSR-11 service locator
|
|
||||||
* added a PSR-11 wrapper
|
|
||||||
* added ServiceIterator
|
|
||||||
* fixed extending a protected closure (now throws InvalidServiceIdentifierException)
|
|
||||||
|
|
||||||
* 3.1.0 (2017-07-03)
|
|
||||||
|
|
||||||
* deprecated the C extension
|
|
||||||
* added support for PSR-11 exceptions
|
|
||||||
|
|
||||||
* 3.0.2 (2015-09-11)
|
|
||||||
|
|
||||||
* refactored the C extension
|
|
||||||
* minor non-significant changes
|
|
||||||
|
|
||||||
* 3.0.1 (2015-07-30)
|
|
||||||
|
|
||||||
* simplified some code
|
|
||||||
* fixed a segfault in the C extension
|
|
||||||
|
|
||||||
* 3.0.0 (2014-07-24)
|
|
||||||
|
|
||||||
* removed the Pimple class alias (use Pimple\Container instead)
|
|
||||||
|
|
||||||
* 2.1.1 (2014-07-24)
|
|
||||||
|
|
||||||
* fixed compiler warnings for the C extension
|
|
||||||
* fixed code when dealing with circular references
|
|
||||||
|
|
||||||
* 2.1.0 (2014-06-24)
|
|
||||||
|
|
||||||
* moved the Pimple to Pimple\Container (with a BC layer -- Pimple is now a
|
|
||||||
deprecated alias which will be removed in Pimple 3.0)
|
|
||||||
* added Pimple\ServiceProviderInterface (and Pimple::register())
|
|
||||||
|
|
||||||
* 2.0.0 (2014-02-10)
|
|
||||||
|
|
||||||
* changed extend to automatically re-assign the extended service and keep it as shared or factory
|
|
||||||
(to keep BC, extend still returns the extended service)
|
|
||||||
* changed services to be shared by default (use factory() for factory
|
|
||||||
services)
|
|
||||||
|
|
||||||
* 1.0.0
|
|
||||||
|
|
||||||
* initial version
|
|
|
@ -1,326 +0,0 @@
|
||||||
Pimple
|
|
||||||
======
|
|
||||||
|
|
||||||
.. caution::
|
|
||||||
|
|
||||||
This is the documentation for Pimple 3.x. If you are using Pimple 1.x, read
|
|
||||||
the `Pimple 1.x documentation`_. Reading the Pimple 1.x code is also a good
|
|
||||||
way to learn more about how to create a simple Dependency Injection
|
|
||||||
Container (recent versions of Pimple are more focused on performance).
|
|
||||||
|
|
||||||
Pimple is a small Dependency Injection Container for PHP.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
Before using Pimple in your project, add it to your ``composer.json`` file:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
$ ./composer.phar require pimple/pimple "^3.0"
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
Creating a container is a matter of creating a ``Container`` instance:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
|
|
||||||
$container = new Container();
|
|
||||||
|
|
||||||
As many other dependency injection containers, Pimple manages two different
|
|
||||||
kind of data: **services** and **parameters**.
|
|
||||||
|
|
||||||
Defining Services
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
A service is an object that does something as part of a larger system. Examples
|
|
||||||
of services: a database connection, a templating engine, or a mailer. Almost
|
|
||||||
any **global** object can be a service.
|
|
||||||
|
|
||||||
Services are defined by **anonymous functions** that return an instance of an
|
|
||||||
object:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
// define some services
|
|
||||||
$container['session_storage'] = function ($c) {
|
|
||||||
return new SessionStorage('SESSION_ID');
|
|
||||||
};
|
|
||||||
|
|
||||||
$container['session'] = function ($c) {
|
|
||||||
return new Session($c['session_storage']);
|
|
||||||
};
|
|
||||||
|
|
||||||
Notice that the anonymous function has access to the current container
|
|
||||||
instance, allowing references to other services or parameters.
|
|
||||||
|
|
||||||
As objects are only created when you get them, the order of the definitions
|
|
||||||
does not matter.
|
|
||||||
|
|
||||||
Using the defined services is also very easy:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
// get the session object
|
|
||||||
$session = $container['session'];
|
|
||||||
|
|
||||||
// the above call is roughly equivalent to the following code:
|
|
||||||
// $storage = new SessionStorage('SESSION_ID');
|
|
||||||
// $session = new Session($storage);
|
|
||||||
|
|
||||||
Defining Factory Services
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
By default, each time you get a service, Pimple returns the **same instance**
|
|
||||||
of it. If you want a different instance to be returned for all calls, wrap your
|
|
||||||
anonymous function with the ``factory()`` method
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$container['session'] = $container->factory(function ($c) {
|
|
||||||
return new Session($c['session_storage']);
|
|
||||||
});
|
|
||||||
|
|
||||||
Now, each call to ``$container['session']`` returns a new instance of the
|
|
||||||
session.
|
|
||||||
|
|
||||||
Defining Parameters
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Defining a parameter allows to ease the configuration of your container from
|
|
||||||
the outside and to store global values:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
// define some parameters
|
|
||||||
$container['cookie_name'] = 'SESSION_ID';
|
|
||||||
$container['session_storage_class'] = 'SessionStorage';
|
|
||||||
|
|
||||||
If you change the ``session_storage`` service definition like below:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$container['session_storage'] = function ($c) {
|
|
||||||
return new $c['session_storage_class']($c['cookie_name']);
|
|
||||||
};
|
|
||||||
|
|
||||||
You can now easily change the cookie name by overriding the
|
|
||||||
``cookie_name`` parameter instead of redefining the service
|
|
||||||
definition.
|
|
||||||
|
|
||||||
Protecting Parameters
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Because Pimple sees anonymous functions as service definitions, you need to
|
|
||||||
wrap anonymous functions with the ``protect()`` method to store them as
|
|
||||||
parameters:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$container['random_func'] = $container->protect(function () {
|
|
||||||
return rand();
|
|
||||||
});
|
|
||||||
|
|
||||||
Modifying Services after Definition
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
In some cases you may want to modify a service definition after it has been
|
|
||||||
defined. You can use the ``extend()`` method to define additional code to be
|
|
||||||
run on your service just after it is created:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$container['session_storage'] = function ($c) {
|
|
||||||
return new $c['session_storage_class']($c['cookie_name']);
|
|
||||||
};
|
|
||||||
|
|
||||||
$container->extend('session_storage', function ($storage, $c) {
|
|
||||||
$storage->...();
|
|
||||||
|
|
||||||
return $storage;
|
|
||||||
});
|
|
||||||
|
|
||||||
The first argument is the name of the service to extend, the second a function
|
|
||||||
that gets access to the object instance and the container.
|
|
||||||
|
|
||||||
Extending a Container
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you use the same libraries over and over, you might want to reuse some
|
|
||||||
services from one project to the next one; package your services into a
|
|
||||||
**provider** by implementing ``Pimple\ServiceProviderInterface``:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
|
|
||||||
class FooProvider implements Pimple\ServiceProviderInterface
|
|
||||||
{
|
|
||||||
public function register(Container $pimple)
|
|
||||||
{
|
|
||||||
// register some services and parameters
|
|
||||||
// on $pimple
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Then, register the provider on a Container:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$pimple->register(new FooProvider());
|
|
||||||
|
|
||||||
Fetching the Service Creation Function
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
When you access an object, Pimple automatically calls the anonymous function
|
|
||||||
that you defined, which creates the service object for you. If you want to get
|
|
||||||
raw access to this function, you can use the ``raw()`` method:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
$container['session'] = function ($c) {
|
|
||||||
return new Session($c['session_storage']);
|
|
||||||
};
|
|
||||||
|
|
||||||
$sessionFunction = $container->raw('session');
|
|
||||||
|
|
||||||
PSR-11 compatibility
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
For historical reasons, the ``Container`` class does not implement the PSR-11
|
|
||||||
``ContainerInterface``. However, Pimple provides a helper class that will let
|
|
||||||
you decouple your code from the Pimple container class.
|
|
||||||
|
|
||||||
The PSR-11 container class
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The ``Pimple\Psr11\Container`` class lets you access the content of an
|
|
||||||
underlying Pimple container using ``Psr\Container\ContainerInterface``
|
|
||||||
methods:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\Psr11\Container as PsrContainer;
|
|
||||||
|
|
||||||
$container = new Container();
|
|
||||||
$container['service'] = function ($c) {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$psr11 = new PsrContainer($container);
|
|
||||||
|
|
||||||
$controller = function (PsrContainer $container) {
|
|
||||||
$service = $container->get('service');
|
|
||||||
};
|
|
||||||
$controller($psr11);
|
|
||||||
|
|
||||||
Using the PSR-11 ServiceLocator
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Sometimes, a service needs access to several other services without being sure
|
|
||||||
that all of them will actually be used. In those cases, you may want the
|
|
||||||
instantiation of the services to be lazy.
|
|
||||||
|
|
||||||
The traditional solution is to inject the entire service container to get only
|
|
||||||
the services really needed. However, this is not recommended because it gives
|
|
||||||
services a too broad access to the rest of the application and it hides their
|
|
||||||
actual dependencies.
|
|
||||||
|
|
||||||
The ``ServiceLocator`` is intended to solve this problem by giving access to a
|
|
||||||
set of predefined services while instantiating them only when actually needed.
|
|
||||||
|
|
||||||
It also allows you to make your services available under a different name than
|
|
||||||
the one used to register them. For instance, you may want to use an object
|
|
||||||
that expects an instance of ``EventDispatcherInterface`` to be available under
|
|
||||||
the name ``event_dispatcher`` while your event dispatcher has been
|
|
||||||
registered under the name ``dispatcher``:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
use Monolog\Logger;
|
|
||||||
use Pimple\Psr11\ServiceLocator;
|
|
||||||
use Psr\Container\ContainerInterface;
|
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
|
||||||
|
|
||||||
class MyService
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* "logger" must be an instance of Psr\Log\LoggerInterface
|
|
||||||
* "event_dispatcher" must be an instance of Symfony\Component\EventDispatcher\EventDispatcherInterface
|
|
||||||
*/
|
|
||||||
private $services;
|
|
||||||
|
|
||||||
public function __construct(ContainerInterface $services)
|
|
||||||
{
|
|
||||||
$this->services = $services;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$container['logger'] = function ($c) {
|
|
||||||
return new Monolog\Logger();
|
|
||||||
};
|
|
||||||
$container['dispatcher'] = function () {
|
|
||||||
return new EventDispatcher();
|
|
||||||
};
|
|
||||||
|
|
||||||
$container['service'] = function ($c) {
|
|
||||||
$locator = new ServiceLocator($c, array('logger', 'event_dispatcher' => 'dispatcher'));
|
|
||||||
|
|
||||||
return new MyService($locator);
|
|
||||||
};
|
|
||||||
|
|
||||||
Referencing a Collection of Services Lazily
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Passing a collection of services instances in an array may prove inefficient
|
|
||||||
if the class that consumes the collection only needs to iterate over it at a
|
|
||||||
later stage, when one of its method is called. It can also lead to problems
|
|
||||||
if there is a circular dependency between one of the services stored in the
|
|
||||||
collection and the class that consumes it.
|
|
||||||
|
|
||||||
The ``ServiceIterator`` class helps you solve these issues. It receives a
|
|
||||||
list of service names during instantiation and will retrieve the services
|
|
||||||
when iterated over:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\ServiceIterator;
|
|
||||||
|
|
||||||
class AuthorizationService
|
|
||||||
{
|
|
||||||
private $voters;
|
|
||||||
|
|
||||||
public function __construct($voters)
|
|
||||||
{
|
|
||||||
$this->voters = $voters;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function canAccess($resource)
|
|
||||||
{
|
|
||||||
foreach ($this->voters as $voter) {
|
|
||||||
if (true === $voter->canAccess($resource) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$container = new Container();
|
|
||||||
|
|
||||||
$container['voter1'] = function ($c) {
|
|
||||||
return new SomeVoter();
|
|
||||||
}
|
|
||||||
$container['voter2'] = function ($c) {
|
|
||||||
return new SomeOtherVoter($c['auth']);
|
|
||||||
}
|
|
||||||
$container['auth'] = function ($c) {
|
|
||||||
return new AuthorizationService(new ServiceIterator($c, array('voter1', 'voter2'));
|
|
||||||
}
|
|
||||||
|
|
||||||
.. _Pimple 1.x documentation: https://github.com/silexphp/Pimple/tree/1.1
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
"name": "pimple/pimple",
|
|
||||||
"type": "library",
|
|
||||||
"description": "Pimple, a simple Dependency Injection Container",
|
|
||||||
"keywords": ["dependency injection", "container"],
|
|
||||||
"homepage": "http://pimple.sensiolabs.org",
|
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Fabien Potencier",
|
|
||||||
"email": "fabien@symfony.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0",
|
|
||||||
"psr/container": "^1.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"symfony/phpunit-bridge": "^3.2"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": { "Pimple": "src/" }
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.2.x-dev"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
*.sw*
|
|
||||||
.deps
|
|
||||||
Makefile
|
|
||||||
Makefile.fragments
|
|
||||||
Makefile.global
|
|
||||||
Makefile.objects
|
|
||||||
acinclude.m4
|
|
||||||
aclocal.m4
|
|
||||||
build/
|
|
||||||
config.cache
|
|
||||||
config.guess
|
|
||||||
config.h
|
|
||||||
config.h.in
|
|
||||||
config.log
|
|
||||||
config.nice
|
|
||||||
config.status
|
|
||||||
config.sub
|
|
||||||
configure
|
|
||||||
configure.in
|
|
||||||
install-sh
|
|
||||||
libtool
|
|
||||||
ltmain.sh
|
|
||||||
missing
|
|
||||||
mkinstalldirs
|
|
||||||
run-tests.php
|
|
||||||
*.loT
|
|
||||||
.libs/
|
|
||||||
modules/
|
|
||||||
*.la
|
|
||||||
*.lo
|
|
|
@ -1,12 +0,0 @@
|
||||||
This is Pimple 2 implemented in C
|
|
||||||
|
|
||||||
* PHP >= 5.3
|
|
||||||
* Not tested under Windows, might work
|
|
||||||
|
|
||||||
Install
|
|
||||||
=======
|
|
||||||
|
|
||||||
> phpize
|
|
||||||
> ./configure
|
|
||||||
> make
|
|
||||||
> make install
|
|
|
@ -1,63 +0,0 @@
|
||||||
dnl $Id$
|
|
||||||
dnl config.m4 for extension pimple
|
|
||||||
|
|
||||||
dnl Comments in this file start with the string 'dnl'.
|
|
||||||
dnl Remove where necessary. This file will not work
|
|
||||||
dnl without editing.
|
|
||||||
|
|
||||||
dnl If your extension references something external, use with:
|
|
||||||
|
|
||||||
dnl PHP_ARG_WITH(pimple, for pimple support,
|
|
||||||
dnl Make sure that the comment is aligned:
|
|
||||||
dnl [ --with-pimple Include pimple support])
|
|
||||||
|
|
||||||
dnl Otherwise use enable:
|
|
||||||
|
|
||||||
PHP_ARG_ENABLE(pimple, whether to enable pimple support,
|
|
||||||
dnl Make sure that the comment is aligned:
|
|
||||||
[ --enable-pimple Enable pimple support])
|
|
||||||
|
|
||||||
if test "$PHP_PIMPLE" != "no"; then
|
|
||||||
dnl Write more examples of tests here...
|
|
||||||
|
|
||||||
dnl # --with-pimple -> check with-path
|
|
||||||
dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
|
|
||||||
dnl SEARCH_FOR="/include/pimple.h" # you most likely want to change this
|
|
||||||
dnl if test -r $PHP_PIMPLE/$SEARCH_FOR; then # path given as parameter
|
|
||||||
dnl PIMPLE_DIR=$PHP_PIMPLE
|
|
||||||
dnl else # search default path list
|
|
||||||
dnl AC_MSG_CHECKING([for pimple files in default path])
|
|
||||||
dnl for i in $SEARCH_PATH ; do
|
|
||||||
dnl if test -r $i/$SEARCH_FOR; then
|
|
||||||
dnl PIMPLE_DIR=$i
|
|
||||||
dnl AC_MSG_RESULT(found in $i)
|
|
||||||
dnl fi
|
|
||||||
dnl done
|
|
||||||
dnl fi
|
|
||||||
dnl
|
|
||||||
dnl if test -z "$PIMPLE_DIR"; then
|
|
||||||
dnl AC_MSG_RESULT([not found])
|
|
||||||
dnl AC_MSG_ERROR([Please reinstall the pimple distribution])
|
|
||||||
dnl fi
|
|
||||||
|
|
||||||
dnl # --with-pimple -> add include path
|
|
||||||
dnl PHP_ADD_INCLUDE($PIMPLE_DIR/include)
|
|
||||||
|
|
||||||
dnl # --with-pimple -> check for lib and symbol presence
|
|
||||||
dnl LIBNAME=pimple # you may want to change this
|
|
||||||
dnl LIBSYMBOL=pimple # you most likely want to change this
|
|
||||||
|
|
||||||
dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
|
|
||||||
dnl [
|
|
||||||
dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PIMPLE_DIR/lib, PIMPLE_SHARED_LIBADD)
|
|
||||||
dnl AC_DEFINE(HAVE_PIMPLELIB,1,[ ])
|
|
||||||
dnl ],[
|
|
||||||
dnl AC_MSG_ERROR([wrong pimple lib version or lib not found])
|
|
||||||
dnl ],[
|
|
||||||
dnl -L$PIMPLE_DIR/lib -lm
|
|
||||||
dnl ])
|
|
||||||
dnl
|
|
||||||
dnl PHP_SUBST(PIMPLE_SHARED_LIBADD)
|
|
||||||
|
|
||||||
PHP_NEW_EXTENSION(pimple, pimple.c, $ext_shared)
|
|
||||||
fi
|
|
|
@ -1,13 +0,0 @@
|
||||||
// $Id$
|
|
||||||
// vim:ft=javascript
|
|
||||||
|
|
||||||
// If your extension references something external, use ARG_WITH
|
|
||||||
// ARG_WITH("pimple", "for pimple support", "no");
|
|
||||||
|
|
||||||
// Otherwise, use ARG_ENABLE
|
|
||||||
// ARG_ENABLE("pimple", "enable pimple support", "no");
|
|
||||||
|
|
||||||
if (PHP_PIMPLE != "no") {
|
|
||||||
EXTENSION("pimple", "pimple.c");
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,137 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PHP_PIMPLE_H
|
|
||||||
#define PHP_PIMPLE_H
|
|
||||||
|
|
||||||
extern zend_module_entry pimple_module_entry;
|
|
||||||
#define phpext_pimple_ptr &pimple_module_entry
|
|
||||||
|
|
||||||
#ifdef PHP_WIN32
|
|
||||||
# define PHP_PIMPLE_API __declspec(dllexport)
|
|
||||||
#elif defined(__GNUC__) && __GNUC__ >= 4
|
|
||||||
# define PHP_PIMPLE_API __attribute__ ((visibility("default")))
|
|
||||||
#else
|
|
||||||
# define PHP_PIMPLE_API
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ZTS
|
|
||||||
#include "TSRM.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PIMPLE_VERSION "3.2.3-DEV"
|
|
||||||
|
|
||||||
#define PIMPLE_NS "Pimple"
|
|
||||||
#define PSR_CONTAINER_NS "Psr\\Container"
|
|
||||||
#define PIMPLE_EXCEPTION_NS "Pimple\\Exception"
|
|
||||||
|
|
||||||
#define PIMPLE_DEFAULT_ZVAL_CACHE_NUM 5
|
|
||||||
#define PIMPLE_DEFAULT_ZVAL_VALUES_NUM 10
|
|
||||||
|
|
||||||
#define PIMPLE_DEPRECATE do { \
|
|
||||||
int er = EG(error_reporting); \
|
|
||||||
EG(error_reporting) = 0;\
|
|
||||||
php_error(E_DEPRECATED, "The Pimple C extension is deprecated since version 3.1 and will be removed in 4.0."); \
|
|
||||||
EG(error_reporting) = er; \
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
zend_module_entry *get_module(void);
|
|
||||||
|
|
||||||
PHP_MINIT_FUNCTION(pimple);
|
|
||||||
PHP_MINFO_FUNCTION(pimple);
|
|
||||||
|
|
||||||
PHP_METHOD(FrozenServiceException, __construct);
|
|
||||||
PHP_METHOD(InvalidServiceIdentifierException, __construct);
|
|
||||||
PHP_METHOD(UnknownIdentifierException, __construct);
|
|
||||||
|
|
||||||
PHP_METHOD(Pimple, __construct);
|
|
||||||
PHP_METHOD(Pimple, factory);
|
|
||||||
PHP_METHOD(Pimple, protect);
|
|
||||||
PHP_METHOD(Pimple, raw);
|
|
||||||
PHP_METHOD(Pimple, extend);
|
|
||||||
PHP_METHOD(Pimple, keys);
|
|
||||||
PHP_METHOD(Pimple, register);
|
|
||||||
PHP_METHOD(Pimple, offsetSet);
|
|
||||||
PHP_METHOD(Pimple, offsetUnset);
|
|
||||||
PHP_METHOD(Pimple, offsetGet);
|
|
||||||
PHP_METHOD(Pimple, offsetExists);
|
|
||||||
|
|
||||||
PHP_METHOD(PimpleClosure, invoker);
|
|
||||||
|
|
||||||
typedef struct _pimple_bucket_value {
|
|
||||||
zval *value; /* Must be the first element */
|
|
||||||
zval *raw;
|
|
||||||
zend_object_handle handle_num;
|
|
||||||
enum {
|
|
||||||
PIMPLE_IS_PARAM = 0,
|
|
||||||
PIMPLE_IS_SERVICE = 2
|
|
||||||
} type;
|
|
||||||
zend_bool initialized;
|
|
||||||
zend_fcall_info_cache fcc;
|
|
||||||
} pimple_bucket_value;
|
|
||||||
|
|
||||||
typedef struct _pimple_object {
|
|
||||||
zend_object zobj;
|
|
||||||
HashTable values;
|
|
||||||
HashTable factories;
|
|
||||||
HashTable protected;
|
|
||||||
} pimple_object;
|
|
||||||
|
|
||||||
typedef struct _pimple_closure_object {
|
|
||||||
zend_object zobj;
|
|
||||||
zval *callable;
|
|
||||||
zval *factory;
|
|
||||||
} pimple_closure_object;
|
|
||||||
|
|
||||||
static const char sensiolabs_logo[] = "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAAUCAMAAABvRTlyAAAAz1BMVEUAAAAAAAAAAAAsThWB5j4AAACD6T8AAACC6D+C6D6C6D+C6D4AAAAAAACC6D4AAAAAAACC6D8AAAAAAAAAAAAAAAAAAAAAAACC6D4AAAAAAAAAAACC6D4AAAAAAAAAAAAAAAAAAAAAAACC6D8AAACC6D4AAAAAAAAAAAAAAAAAAACC6D8AAACC6D6C6D+B6D+C6D+C6D+C6D8AAACC6D6C6D4AAACC6D/K/2KC6D+B6D6C6D6C6D+C6D8sTxUyWRhEeiEAAACC6D+C5z6B6D7drnEVAAAAQXRSTlMAE3oCNSUuDHFHzxaF9UFsu+irX+zlKzYimaJXktyOSFD6BolxqT7QGMMdarMIpuO28r9EolXKgR16OphfXYd4V14GtB4AAAMpSURBVEjHvVSJctowEF1jjME2RziMwUCoMfd9heZqG4n//6buLpJjkmYm03byZmxJa2nf6u2uQcG2bfhqRN4LoTKBzyGDm68M7mAwcOEdjo4zhA/Rf9Go/CVtTgiRhXfIC3EDH8F/eUX1/9KexRo+QgOdtHDsEe/sM7QT32/+K61Z1LFXcXJxN4pTbu1aTQUzuy2PIA0rDo0/0Aa5XFaJvKaVTrubywXvaa1Wq4Vu/Snr3Y7Aojh4VccwykW2N2oQ8wmjyut6+Q1t5ywIG5Npj1sh5E0B7YOzFDjfuRfaOh3O+MbbVNfTWS9COZk3Obd2su5d0a6IU9KLREbw8gEehWSr1r2sPWciXLG38r5NdW0xu9eioU87omjC9yNaMi5GNf6WppVSOqXCFkmCvMB3p9SROLoYQn5pDgQOujA1xjYvqH+plUdkwnmII8VxR/PKYkrfLLomhVlE3b/LhNbNr7hp0H2JaOc4v8dFB58HSsFTSafaqtY1sT3GO8wsy5rhokYPlRJdjPMajyYqTt1EHF/2uqSWQWmAjCUSmQ1MS3g8Btf1XOsy7YIC0CB1b5Xw1Vhba0zbxiCAQLH9TNPmHJXQUtJAN0KcDsoqLxsNvJrJExa7mKIdp2lRE2WexiS4pqWk/0jROlw6K6bV9YOBDGAuqMJ0bnuUKGB0L27bxgRhGEbzihbhxxXaQC88Vkwq8ldCi86RApWUb0Q+4VDosBCc+1s81lUdnBavH4Zp2mm3O44USwOfvSo9oBiwpFg71lMS1VKJLKljS3j9p+fOTvXXlsSNuEv6YPaZda9uRope0VJfKdo7fPiYfSmvFjXQbkhY0d9hCbBWIktRgEDieDhf1N3wbbkmNNgRy8hyl620yGQat/grV3HMpc2HDKTVmOPFz6ylPCKt/nXcAyV260jaAowwIW0YuBzrOgb/KrddZS9OmJaLgpWK4JX2DDuklcLZSDGcn8Vmx9YDNvT6UsjyBApRyFQVX7Vxm9TGxE16nmfRd8/zQoDmggQOTRh5Hv8pMt9Q/L2JmSwkMCE7dA4BuDjHJwfu0Om4QAhOjrN5XkIatglfiN/bUPdCQFjTYgAAAABJRU5ErkJggg==\">";
|
|
||||||
|
|
||||||
static void pimple_exception_call_parent_constructor(zval *this_ptr, const char *format, const char *arg1 TSRMLS_DC);
|
|
||||||
|
|
||||||
static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC);
|
|
||||||
static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC);
|
|
||||||
|
|
||||||
static void pimple_bucket_dtor(pimple_bucket_value *bucket);
|
|
||||||
static void pimple_free_bucket(pimple_bucket_value *bucket);
|
|
||||||
|
|
||||||
static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC);
|
|
||||||
static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC);
|
|
||||||
static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC);
|
|
||||||
static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC);
|
|
||||||
static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC);
|
|
||||||
static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC);
|
|
||||||
|
|
||||||
static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC);
|
|
||||||
static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC);
|
|
||||||
static zend_function *pimple_closure_get_constructor(zval * TSRMLS_DC);
|
|
||||||
static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC);
|
|
||||||
|
|
||||||
#ifdef ZTS
|
|
||||||
#define PIMPLE_G(v) TSRMG(pimple_globals_id, zend_pimple_globals *, v)
|
|
||||||
#else
|
|
||||||
#define PIMPLE_G(v) (pimple_globals.v)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* PHP_PIMPLE_H */
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,81 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2014 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PIMPLE_COMPAT_H_
|
|
||||||
#define PIMPLE_COMPAT_H_
|
|
||||||
|
|
||||||
#include "Zend/zend_extensions.h" /* for ZEND_EXTENSION_API_NO */
|
|
||||||
|
|
||||||
#define PHP_5_0_X_API_NO 220040412
|
|
||||||
#define PHP_5_1_X_API_NO 220051025
|
|
||||||
#define PHP_5_2_X_API_NO 220060519
|
|
||||||
#define PHP_5_3_X_API_NO 220090626
|
|
||||||
#define PHP_5_4_X_API_NO 220100525
|
|
||||||
#define PHP_5_5_X_API_NO 220121212
|
|
||||||
#define PHP_5_6_X_API_NO 220131226
|
|
||||||
|
|
||||||
#define IS_PHP_56 ZEND_EXTENSION_API_NO == PHP_5_6_X_API_NO
|
|
||||||
#define IS_AT_LEAST_PHP_56 ZEND_EXTENSION_API_NO >= PHP_5_6_X_API_NO
|
|
||||||
|
|
||||||
#define IS_PHP_55 ZEND_EXTENSION_API_NO == PHP_5_5_X_API_NO
|
|
||||||
#define IS_AT_LEAST_PHP_55 ZEND_EXTENSION_API_NO >= PHP_5_5_X_API_NO
|
|
||||||
|
|
||||||
#define IS_PHP_54 ZEND_EXTENSION_API_NO == PHP_5_4_X_API_NO
|
|
||||||
#define IS_AT_LEAST_PHP_54 ZEND_EXTENSION_API_NO >= PHP_5_4_X_API_NO
|
|
||||||
|
|
||||||
#define IS_PHP_53 ZEND_EXTENSION_API_NO == PHP_5_3_X_API_NO
|
|
||||||
#define IS_AT_LEAST_PHP_53 ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO
|
|
||||||
|
|
||||||
#if IS_PHP_53
|
|
||||||
#define object_properties_init(obj, ce) do { \
|
|
||||||
zend_hash_copy(obj->properties, &ce->default_properties, zval_copy_property_ctor(ce), NULL, sizeof(zval *)); \
|
|
||||||
} while (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ZEND_OBJ_INIT(obj, ce) do { \
|
|
||||||
zend_object_std_init(obj, ce TSRMLS_CC); \
|
|
||||||
object_properties_init((obj), (ce)); \
|
|
||||||
} while(0);
|
|
||||||
|
|
||||||
#if IS_PHP_53 || IS_PHP_54
|
|
||||||
static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) {
|
|
||||||
Bucket *p;
|
|
||||||
|
|
||||||
p = pos ? (*pos) : ht->pInternalPointer;
|
|
||||||
|
|
||||||
if (!p) {
|
|
||||||
Z_TYPE_P(key) = IS_NULL;
|
|
||||||
} else if (p->nKeyLength) {
|
|
||||||
Z_TYPE_P(key) = IS_STRING;
|
|
||||||
Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1);
|
|
||||||
Z_STRLEN_P(key) = p->nKeyLength - 1;
|
|
||||||
} else {
|
|
||||||
Z_TYPE_P(key) = IS_LONG;
|
|
||||||
Z_LVAL_P(key) = p->h;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* PIMPLE_COMPAT_H_ */
|
|
|
@ -1,45 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test for read_dim/write_dim handlers
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[42] = 'foo';
|
|
||||||
$p['foo'] = 42;
|
|
||||||
|
|
||||||
echo $p[42];
|
|
||||||
echo "\n";
|
|
||||||
echo $p['foo'];
|
|
||||||
echo "\n";
|
|
||||||
try {
|
|
||||||
var_dump($p['nonexistant']);
|
|
||||||
echo "Exception excpected";
|
|
||||||
} catch (InvalidArgumentException $e) { }
|
|
||||||
|
|
||||||
$p[54.2] = 'foo2';
|
|
||||||
echo $p[54];
|
|
||||||
echo "\n";
|
|
||||||
$p[242.99] = 'foo99';
|
|
||||||
echo $p[242];
|
|
||||||
|
|
||||||
echo "\n";
|
|
||||||
|
|
||||||
$p[5] = 'bar';
|
|
||||||
$p[5] = 'baz';
|
|
||||||
echo $p[5];
|
|
||||||
|
|
||||||
echo "\n";
|
|
||||||
|
|
||||||
$p['str'] = 'str';
|
|
||||||
$p['str'] = 'strstr';
|
|
||||||
echo $p['str'];
|
|
||||||
?>
|
|
||||||
|
|
||||||
--EXPECTF--
|
|
||||||
foo
|
|
||||||
42
|
|
||||||
foo2
|
|
||||||
foo99
|
|
||||||
baz
|
|
||||||
strstr
|
|
|
@ -1,15 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test for constructor
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
var_dump($p[42]);
|
|
||||||
|
|
||||||
$p = new Pimple\Container(array(42=>'foo'));
|
|
||||||
var_dump($p[42]);
|
|
||||||
?>
|
|
||||||
--EXPECT--
|
|
||||||
NULL
|
|
||||||
string(3) "foo"
|
|
|
@ -1,16 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test empty dimensions
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[] = 42;
|
|
||||||
var_dump($p[0]);
|
|
||||||
$p[41] = 'foo';
|
|
||||||
$p[] = 'bar';
|
|
||||||
var_dump($p[42]);
|
|
||||||
?>
|
|
||||||
--EXPECT--
|
|
||||||
int(42)
|
|
||||||
string(3) "bar"
|
|
|
@ -1,30 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test has/unset dim handlers
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[] = 42;
|
|
||||||
var_dump($p[0]);
|
|
||||||
unset($p[0]);
|
|
||||||
var_dump($p[0]);
|
|
||||||
$p['foo'] = 'bar';
|
|
||||||
var_dump(isset($p['foo']));
|
|
||||||
unset($p['foo']);
|
|
||||||
try {
|
|
||||||
var_dump($p['foo']);
|
|
||||||
echo "Excpected exception";
|
|
||||||
} catch (InvalidArgumentException $e) { }
|
|
||||||
var_dump(isset($p['bar']));
|
|
||||||
$p['bar'] = NULL;
|
|
||||||
var_dump(isset($p['bar']));
|
|
||||||
var_dump(empty($p['bar']));
|
|
||||||
?>
|
|
||||||
--EXPECT--
|
|
||||||
int(42)
|
|
||||||
NULL
|
|
||||||
bool(true)
|
|
||||||
bool(false)
|
|
||||||
bool(true)
|
|
||||||
bool(true)
|
|
|
@ -1,27 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test simple class inheritance
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
class MyPimple extends Pimple\Container
|
|
||||||
{
|
|
||||||
public $someAttr = 'fooAttr';
|
|
||||||
|
|
||||||
public function offsetget($o)
|
|
||||||
{
|
|
||||||
var_dump("hit");
|
|
||||||
return parent::offsetget($o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = new MyPimple;
|
|
||||||
$p[42] = 'foo';
|
|
||||||
echo $p[42];
|
|
||||||
echo "\n";
|
|
||||||
echo $p->someAttr;
|
|
||||||
?>
|
|
||||||
--EXPECT--
|
|
||||||
string(3) "hit"
|
|
||||||
foo
|
|
||||||
fooAttr
|
|
|
@ -1,51 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test complex class inheritance
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
class MyPimple extends Pimple\Container
|
|
||||||
{
|
|
||||||
public function offsetget($o)
|
|
||||||
{
|
|
||||||
var_dump("hit offsetget in " . __CLASS__);
|
|
||||||
return parent::offsetget($o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class TestPimple extends MyPimple
|
|
||||||
{
|
|
||||||
public function __construct($values)
|
|
||||||
{
|
|
||||||
array_shift($values);
|
|
||||||
parent::__construct($values);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function offsetget($o)
|
|
||||||
{
|
|
||||||
var_dump('hit offsetget in ' . __CLASS__);
|
|
||||||
return parent::offsetget($o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function offsetset($o, $v)
|
|
||||||
{
|
|
||||||
var_dump('hit offsetset');
|
|
||||||
return parent::offsetset($o, $v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$defaultValues = array('foo' => 'bar', 88 => 'baz');
|
|
||||||
|
|
||||||
$p = new TestPimple($defaultValues);
|
|
||||||
$p[42] = 'foo';
|
|
||||||
var_dump($p[42]);
|
|
||||||
var_dump($p[0]);
|
|
||||||
?>
|
|
||||||
--EXPECT--
|
|
||||||
string(13) "hit offsetset"
|
|
||||||
string(27) "hit offsetget in TestPimple"
|
|
||||||
string(25) "hit offsetget in MyPimple"
|
|
||||||
string(3) "foo"
|
|
||||||
string(27) "hit offsetget in TestPimple"
|
|
||||||
string(25) "hit offsetget in MyPimple"
|
|
||||||
string(3) "baz"
|
|
|
@ -1,22 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test for read_dim/write_dim handlers
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[42] = 'foo';
|
|
||||||
$p['foo'] = 42;
|
|
||||||
|
|
||||||
echo $p[42];
|
|
||||||
echo "\n";
|
|
||||||
echo $p['foo'];
|
|
||||||
echo "\n";
|
|
||||||
try {
|
|
||||||
var_dump($p['nonexistant']);
|
|
||||||
echo "Exception excpected";
|
|
||||||
} catch (InvalidArgumentException $e) { }
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
foo
|
|
||||||
42
|
|
|
@ -1,29 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test frozen services
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[42] = 'foo';
|
|
||||||
$p[42] = 'bar';
|
|
||||||
|
|
||||||
$p['foo'] = function () { };
|
|
||||||
$p['foo'] = function () { };
|
|
||||||
|
|
||||||
$a = $p['foo'];
|
|
||||||
|
|
||||||
try {
|
|
||||||
$p['foo'] = function () { };
|
|
||||||
echo "Exception excpected";
|
|
||||||
} catch (RuntimeException $e) { }
|
|
||||||
|
|
||||||
$p[42] = function() { };
|
|
||||||
$a = $p[42];
|
|
||||||
|
|
||||||
try {
|
|
||||||
$p[42] = function () { };
|
|
||||||
echo "Exception excpected";
|
|
||||||
} catch (RuntimeException $e) { }
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
|
@ -1,13 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test service is called as callback, and only once
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p['foo'] = function($arg) use ($p) { var_dump($p === $arg); };
|
|
||||||
$a = $p['foo'];
|
|
||||||
$b = $p['foo']; /* should return not calling the callback */
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
bool(true)
|
|
|
@ -1,45 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test service is called as callback for every callback type
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
function callme()
|
|
||||||
{
|
|
||||||
return 'called';
|
|
||||||
}
|
|
||||||
|
|
||||||
$a = function() { return 'called'; };
|
|
||||||
|
|
||||||
class Foo
|
|
||||||
{
|
|
||||||
public static function bar()
|
|
||||||
{
|
|
||||||
return 'called';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p['foo'] = 'callme';
|
|
||||||
echo $p['foo'] . "\n";
|
|
||||||
|
|
||||||
$p['bar'] = $a;
|
|
||||||
echo $p['bar'] . "\n";
|
|
||||||
|
|
||||||
$p['baz'] = "Foo::bar";
|
|
||||||
echo $p['baz'] . "\n";
|
|
||||||
|
|
||||||
$p['foobar'] = array('Foo', 'bar');
|
|
||||||
var_dump($p['foobar']);
|
|
||||||
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
callme
|
|
||||||
called
|
|
||||||
Foo::bar
|
|
||||||
array(2) {
|
|
||||||
[0]=>
|
|
||||||
string(3) "Foo"
|
|
||||||
[1]=>
|
|
||||||
string(3) "bar"
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test service callback throwing an exception
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
class CallBackException extends RuntimeException { }
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p['foo'] = function () { throw new CallBackException; };
|
|
||||||
try {
|
|
||||||
echo $p['foo'] . "\n";
|
|
||||||
echo "should not come here";
|
|
||||||
} catch (CallBackException $e) {
|
|
||||||
echo "all right!";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
all right!
|
|
|
@ -1,28 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test service factory
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
|
|
||||||
$p->factory($f = function() { var_dump('called-1'); return 'ret-1';});
|
|
||||||
|
|
||||||
$p[] = $f;
|
|
||||||
|
|
||||||
$p[] = function () { var_dump('called-2'); return 'ret-2'; };
|
|
||||||
|
|
||||||
var_dump($p[0]);
|
|
||||||
var_dump($p[0]);
|
|
||||||
var_dump($p[1]);
|
|
||||||
var_dump($p[1]);
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
string(8) "called-1"
|
|
||||||
string(5) "ret-1"
|
|
||||||
string(8) "called-1"
|
|
||||||
string(5) "ret-1"
|
|
||||||
string(8) "called-2"
|
|
||||||
string(5) "ret-2"
|
|
||||||
string(5) "ret-2"
|
|
|
@ -1,33 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test keys()
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
|
|
||||||
var_dump($p->keys());
|
|
||||||
|
|
||||||
$p['foo'] = 'bar';
|
|
||||||
$p[] = 'foo';
|
|
||||||
|
|
||||||
var_dump($p->keys());
|
|
||||||
|
|
||||||
unset($p['foo']);
|
|
||||||
|
|
||||||
var_dump($p->keys());
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
array(0) {
|
|
||||||
}
|
|
||||||
array(2) {
|
|
||||||
[0]=>
|
|
||||||
string(3) "foo"
|
|
||||||
[1]=>
|
|
||||||
int(0)
|
|
||||||
}
|
|
||||||
array(1) {
|
|
||||||
[0]=>
|
|
||||||
int(0)
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test raw()
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$f = function () { var_dump('called-2'); return 'ret-2'; };
|
|
||||||
|
|
||||||
$p['foo'] = $f;
|
|
||||||
$p[42] = $f;
|
|
||||||
|
|
||||||
var_dump($p['foo']);
|
|
||||||
var_dump($p->raw('foo'));
|
|
||||||
var_dump($p[42]);
|
|
||||||
|
|
||||||
unset($p['foo']);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$p->raw('foo');
|
|
||||||
echo "expected exception";
|
|
||||||
} catch (InvalidArgumentException $e) { }
|
|
||||||
--EXPECTF--
|
|
||||||
string(8) "called-2"
|
|
||||||
string(5) "ret-2"
|
|
||||||
object(Closure)#%i (0) {
|
|
||||||
}
|
|
||||||
string(8) "called-2"
|
|
||||||
string(5) "ret-2"
|
|
|
@ -1,17 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test protect()
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$f = function () { return 'foo'; };
|
|
||||||
$p['foo'] = $f;
|
|
||||||
|
|
||||||
$p->protect($f);
|
|
||||||
|
|
||||||
var_dump($p['foo']);
|
|
||||||
--EXPECTF--
|
|
||||||
object(Closure)#%i (0) {
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test extend()
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
This is part of Pimple::extend() code :
|
|
||||||
|
|
||||||
$extended = function ($c) use ($callable, $factory) {
|
|
||||||
return $callable($factory($c), $c);
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[12] = function ($v) { var_dump($v); return 'foo';}; /* $factory in code above */
|
|
||||||
|
|
||||||
$c = $p->extend(12, function ($w) { var_dump($w); return 'bar'; }); /* $callable in code above */
|
|
||||||
|
|
||||||
var_dump($c('param'));
|
|
||||||
--EXPECTF--
|
|
||||||
string(5) "param"
|
|
||||||
string(3) "foo"
|
|
||||||
string(3) "bar"
|
|
|
@ -1,17 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test extend() with exception in service extension
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[12] = function ($v) { return 'foo';};
|
|
||||||
|
|
||||||
$c = $p->extend(12, function ($w) { throw new BadMethodCallException; });
|
|
||||||
|
|
||||||
try {
|
|
||||||
$p[12];
|
|
||||||
echo "Exception expected";
|
|
||||||
} catch (BadMethodCallException $e) { }
|
|
||||||
--EXPECTF--
|
|
|
@ -1,17 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test extend() with exception in service factory
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p[12] = function ($v) { throw new BadMethodCallException; };
|
|
||||||
|
|
||||||
$c = $p->extend(12, function ($w) { return 'foobar'; });
|
|
||||||
|
|
||||||
try {
|
|
||||||
$p[12];
|
|
||||||
echo "Exception expected";
|
|
||||||
} catch (BadMethodCallException $e) { }
|
|
||||||
--EXPECTF--
|
|
|
@ -1,23 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test register()
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
class Foo implements Pimple\ServiceProviderInterface
|
|
||||||
{
|
|
||||||
public function register(Pimple\Container $p)
|
|
||||||
{
|
|
||||||
var_dump($p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
$p->register(new Foo, array(42 => 'bar'));
|
|
||||||
|
|
||||||
var_dump($p[42]);
|
|
||||||
--EXPECTF--
|
|
||||||
object(Pimple\Container)#1 (0) {
|
|
||||||
}
|
|
||||||
string(3) "bar"
|
|
|
@ -1,18 +0,0 @@
|
||||||
--TEST--
|
|
||||||
Test register() returns static and is a fluent interface
|
|
||||||
--SKIPIF--
|
|
||||||
<?php if (!extension_loaded("pimple")) print "skip"; ?>
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
class Foo implements Pimple\ServiceProviderInterface
|
|
||||||
{
|
|
||||||
public function register(Pimple\Container $p)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$p = new Pimple\Container();
|
|
||||||
var_dump($p === $p->register(new Foo));
|
|
||||||
--EXPECTF--
|
|
||||||
bool(true)
|
|
|
@ -1,51 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
if (!class_exists('Pimple\Container')) {
|
|
||||||
require_once __DIR__ . '/../../../src/Pimple/Container.php';
|
|
||||||
} else {
|
|
||||||
echo "pimple-c extension detected, using...\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$time = microtime(true);
|
|
||||||
|
|
||||||
function foo() { }
|
|
||||||
$factory = function () { };
|
|
||||||
|
|
||||||
for ($i=0; $i<10000; $i++) {
|
|
||||||
|
|
||||||
$p = new Pimple\Container;
|
|
||||||
|
|
||||||
$p['foo'] = 'bar';
|
|
||||||
|
|
||||||
if (!isset($p[3])) {
|
|
||||||
$p[3] = $p['foo'];
|
|
||||||
$p[] = 'bar';
|
|
||||||
}
|
|
||||||
|
|
||||||
$p[2] = 42;
|
|
||||||
|
|
||||||
if (isset($p[2])) {
|
|
||||||
unset($p[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$p[42] = $p['foo'];
|
|
||||||
|
|
||||||
$p['cb'] = function($arg) { };
|
|
||||||
|
|
||||||
$p[] = $p['cb'];
|
|
||||||
|
|
||||||
echo $p['cb'];
|
|
||||||
echo $p['cb'];
|
|
||||||
echo $p['cb'];
|
|
||||||
|
|
||||||
//$p->factory($factory);
|
|
||||||
|
|
||||||
$p['factory'] = $factory;
|
|
||||||
|
|
||||||
echo $p['factory'];
|
|
||||||
echo $p['factory'];
|
|
||||||
echo $p['factory'];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
echo microtime(true) - $time;
|
|
|
@ -1,25 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
if (!class_exists('Pimple\Container')) {
|
|
||||||
require_once __DIR__ . '/../../../src/Pimple/Container.php';
|
|
||||||
} else {
|
|
||||||
echo "pimple-c extension detected, using...\n\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$time = microtime(true);
|
|
||||||
|
|
||||||
|
|
||||||
$service = function ($arg) { return "I'm a service"; };
|
|
||||||
|
|
||||||
for ($i=0; $i<10000; $i++) {
|
|
||||||
|
|
||||||
$p = new Pimple\Container;
|
|
||||||
$p['my_service'] = $service;
|
|
||||||
|
|
||||||
$a = $p['my_service'];
|
|
||||||
$b = $p['my_service'];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
echo microtime(true) - $time;
|
|
||||||
?>
|
|
|
@ -1,14 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
|
|
||||||
backupGlobals="false"
|
|
||||||
colors="true"
|
|
||||||
bootstrap="vendor/autoload.php"
|
|
||||||
>
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Pimple Test Suite">
|
|
||||||
<directory>./src/Pimple/Tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|
|
@ -1,298 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple;
|
|
||||||
|
|
||||||
use Pimple\Exception\ExpectedInvokableException;
|
|
||||||
use Pimple\Exception\FrozenServiceException;
|
|
||||||
use Pimple\Exception\InvalidServiceIdentifierException;
|
|
||||||
use Pimple\Exception\UnknownIdentifierException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Container main class.
|
|
||||||
*
|
|
||||||
* @author Fabien Potencier
|
|
||||||
*/
|
|
||||||
class Container implements \ArrayAccess
|
|
||||||
{
|
|
||||||
private $values = array();
|
|
||||||
private $factories;
|
|
||||||
private $protected;
|
|
||||||
private $frozen = array();
|
|
||||||
private $raw = array();
|
|
||||||
private $keys = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates the container.
|
|
||||||
*
|
|
||||||
* Objects and parameters can be passed as argument to the constructor.
|
|
||||||
*
|
|
||||||
* @param array $values The parameters or objects
|
|
||||||
*/
|
|
||||||
public function __construct(array $values = array())
|
|
||||||
{
|
|
||||||
$this->factories = new \SplObjectStorage();
|
|
||||||
$this->protected = new \SplObjectStorage();
|
|
||||||
|
|
||||||
foreach ($values as $key => $value) {
|
|
||||||
$this->offsetSet($key, $value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets a parameter or an object.
|
|
||||||
*
|
|
||||||
* Objects must be defined as Closures.
|
|
||||||
*
|
|
||||||
* Allowing any PHP callable leads to difficult to debug problems
|
|
||||||
* as function names (strings) are callable (creating a function with
|
|
||||||
* the same name as an existing parameter would break your container).
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the parameter or object
|
|
||||||
* @param mixed $value The value of the parameter or a closure to define an object
|
|
||||||
*
|
|
||||||
* @throws FrozenServiceException Prevent override of a frozen service
|
|
||||||
*/
|
|
||||||
public function offsetSet($id, $value)
|
|
||||||
{
|
|
||||||
if (isset($this->frozen[$id])) {
|
|
||||||
throw new FrozenServiceException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->values[$id] = $value;
|
|
||||||
$this->keys[$id] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a parameter or an object.
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the parameter or object
|
|
||||||
*
|
|
||||||
* @return mixed The value of the parameter or an object
|
|
||||||
*
|
|
||||||
* @throws UnknownIdentifierException If the identifier is not defined
|
|
||||||
*/
|
|
||||||
public function offsetGet($id)
|
|
||||||
{
|
|
||||||
if (!isset($this->keys[$id])) {
|
|
||||||
throw new UnknownIdentifierException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
isset($this->raw[$id])
|
|
||||||
|| !\is_object($this->values[$id])
|
|
||||||
|| isset($this->protected[$this->values[$id]])
|
|
||||||
|| !\method_exists($this->values[$id], '__invoke')
|
|
||||||
) {
|
|
||||||
return $this->values[$id];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->factories[$this->values[$id]])) {
|
|
||||||
return $this->values[$id]($this);
|
|
||||||
}
|
|
||||||
|
|
||||||
$raw = $this->values[$id];
|
|
||||||
$val = $this->values[$id] = $raw($this);
|
|
||||||
$this->raw[$id] = $raw;
|
|
||||||
|
|
||||||
$this->frozen[$id] = true;
|
|
||||||
|
|
||||||
return $val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a parameter or an object is set.
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the parameter or object
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function offsetExists($id)
|
|
||||||
{
|
|
||||||
return isset($this->keys[$id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unsets a parameter or an object.
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the parameter or object
|
|
||||||
*/
|
|
||||||
public function offsetUnset($id)
|
|
||||||
{
|
|
||||||
if (isset($this->keys[$id])) {
|
|
||||||
if (\is_object($this->values[$id])) {
|
|
||||||
unset($this->factories[$this->values[$id]], $this->protected[$this->values[$id]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($this->values[$id], $this->frozen[$id], $this->raw[$id], $this->keys[$id]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Marks a callable as being a factory service.
|
|
||||||
*
|
|
||||||
* @param callable $callable A service definition to be used as a factory
|
|
||||||
*
|
|
||||||
* @return callable The passed callable
|
|
||||||
*
|
|
||||||
* @throws ExpectedInvokableException Service definition has to be a closure or an invokable object
|
|
||||||
*/
|
|
||||||
public function factory($callable)
|
|
||||||
{
|
|
||||||
if (!\method_exists($callable, '__invoke')) {
|
|
||||||
throw new ExpectedInvokableException('Service definition is not a Closure or invokable object.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->factories->attach($callable);
|
|
||||||
|
|
||||||
return $callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Protects a callable from being interpreted as a service.
|
|
||||||
*
|
|
||||||
* This is useful when you want to store a callable as a parameter.
|
|
||||||
*
|
|
||||||
* @param callable $callable A callable to protect from being evaluated
|
|
||||||
*
|
|
||||||
* @return callable The passed callable
|
|
||||||
*
|
|
||||||
* @throws ExpectedInvokableException Service definition has to be a closure or an invokable object
|
|
||||||
*/
|
|
||||||
public function protect($callable)
|
|
||||||
{
|
|
||||||
if (!\method_exists($callable, '__invoke')) {
|
|
||||||
throw new ExpectedInvokableException('Callable is not a Closure or invokable object.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->protected->attach($callable);
|
|
||||||
|
|
||||||
return $callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a parameter or the closure defining an object.
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the parameter or object
|
|
||||||
*
|
|
||||||
* @return mixed The value of the parameter or the closure defining an object
|
|
||||||
*
|
|
||||||
* @throws UnknownIdentifierException If the identifier is not defined
|
|
||||||
*/
|
|
||||||
public function raw($id)
|
|
||||||
{
|
|
||||||
if (!isset($this->keys[$id])) {
|
|
||||||
throw new UnknownIdentifierException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->raw[$id])) {
|
|
||||||
return $this->raw[$id];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->values[$id];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extends an object definition.
|
|
||||||
*
|
|
||||||
* Useful when you want to extend an existing object definition,
|
|
||||||
* without necessarily loading that object.
|
|
||||||
*
|
|
||||||
* @param string $id The unique identifier for the object
|
|
||||||
* @param callable $callable A service definition to extend the original
|
|
||||||
*
|
|
||||||
* @return callable The wrapped callable
|
|
||||||
*
|
|
||||||
* @throws UnknownIdentifierException If the identifier is not defined
|
|
||||||
* @throws FrozenServiceException If the service is frozen
|
|
||||||
* @throws InvalidServiceIdentifierException If the identifier belongs to a parameter
|
|
||||||
* @throws ExpectedInvokableException If the extension callable is not a closure or an invokable object
|
|
||||||
*/
|
|
||||||
public function extend($id, $callable)
|
|
||||||
{
|
|
||||||
if (!isset($this->keys[$id])) {
|
|
||||||
throw new UnknownIdentifierException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->frozen[$id])) {
|
|
||||||
throw new FrozenServiceException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!\is_object($this->values[$id]) || !\method_exists($this->values[$id], '__invoke')) {
|
|
||||||
throw new InvalidServiceIdentifierException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->protected[$this->values[$id]])) {
|
|
||||||
@\trigger_error(\sprintf('How Pimple behaves when extending protected closures will be fixed in Pimple 4. Are you sure "%s" should be protected?', $id), \E_USER_DEPRECATED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!\is_object($callable) || !\method_exists($callable, '__invoke')) {
|
|
||||||
throw new ExpectedInvokableException('Extension service definition is not a Closure or invokable object.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$factory = $this->values[$id];
|
|
||||||
|
|
||||||
$extended = function ($c) use ($callable, $factory) {
|
|
||||||
return $callable($factory($c), $c);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (isset($this->factories[$factory])) {
|
|
||||||
$this->factories->detach($factory);
|
|
||||||
$this->factories->attach($extended);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this[$id] = $extended;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns all defined value names.
|
|
||||||
*
|
|
||||||
* @return array An array of value names
|
|
||||||
*/
|
|
||||||
public function keys()
|
|
||||||
{
|
|
||||||
return \array_keys($this->values);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a service provider.
|
|
||||||
*
|
|
||||||
* @param ServiceProviderInterface $provider A ServiceProviderInterface instance
|
|
||||||
* @param array $values An array of values that customizes the provider
|
|
||||||
*
|
|
||||||
* @return static
|
|
||||||
*/
|
|
||||||
public function register(ServiceProviderInterface $provider, array $values = array())
|
|
||||||
{
|
|
||||||
$provider->register($this);
|
|
||||||
|
|
||||||
foreach ($values as $key => $value) {
|
|
||||||
$this[$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A closure or invokable object was expected.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class ExpectedInvokableException extends \InvalidArgumentException implements ContainerExceptionInterface
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An attempt to modify a frozen service was made.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class FrozenServiceException extends \RuntimeException implements ContainerExceptionInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $id Identifier of the frozen service
|
|
||||||
*/
|
|
||||||
public function __construct($id)
|
|
||||||
{
|
|
||||||
parent::__construct(\sprintf('Cannot override frozen service "%s".', $id));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An attempt to perform an operation that requires a service identifier was made.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class InvalidServiceIdentifierException extends \InvalidArgumentException implements NotFoundExceptionInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $id The invalid identifier
|
|
||||||
*/
|
|
||||||
public function __construct($id)
|
|
||||||
{
|
|
||||||
parent::__construct(\sprintf('Identifier "%s" does not contain an object definition.', $id));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Exception;
|
|
||||||
|
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The identifier of a valid service or parameter was expected.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class UnknownIdentifierException extends \InvalidArgumentException implements NotFoundExceptionInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $id The unknown identifier
|
|
||||||
*/
|
|
||||||
public function __construct($id)
|
|
||||||
{
|
|
||||||
parent::__construct(\sprintf('Identifier "%s" is not defined.', $id));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009-2017 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Psr11;
|
|
||||||
|
|
||||||
use Pimple\Container as PimpleContainer;
|
|
||||||
use Psr\Container\ContainerInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PSR-11 compliant wrapper.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
final class Container implements ContainerInterface
|
|
||||||
{
|
|
||||||
private $pimple;
|
|
||||||
|
|
||||||
public function __construct(PimpleContainer $pimple)
|
|
||||||
{
|
|
||||||
$this->pimple = $pimple;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get($id)
|
|
||||||
{
|
|
||||||
return $this->pimple[$id];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function has($id)
|
|
||||||
{
|
|
||||||
return isset($this->pimple[$id]);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,75 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Psr11;
|
|
||||||
|
|
||||||
use Pimple\Container as PimpleContainer;
|
|
||||||
use Pimple\Exception\UnknownIdentifierException;
|
|
||||||
use Psr\Container\ContainerInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pimple PSR-11 service locator.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class ServiceLocator implements ContainerInterface
|
|
||||||
{
|
|
||||||
private $container;
|
|
||||||
private $aliases = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param PimpleContainer $container The Container instance used to locate services
|
|
||||||
* @param array $ids Array of service ids that can be located. String keys can be used to define aliases
|
|
||||||
*/
|
|
||||||
public function __construct(PimpleContainer $container, array $ids)
|
|
||||||
{
|
|
||||||
$this->container = $container;
|
|
||||||
|
|
||||||
foreach ($ids as $key => $id) {
|
|
||||||
$this->aliases[\is_int($key) ? $id : $key] = $id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function get($id)
|
|
||||||
{
|
|
||||||
if (!isset($this->aliases[$id])) {
|
|
||||||
throw new UnknownIdentifierException($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->container[$this->aliases[$id]];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function has($id)
|
|
||||||
{
|
|
||||||
return isset($this->aliases[$id]) && isset($this->container[$this->aliases[$id]]);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lazy service iterator.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
final class ServiceIterator implements \Iterator
|
|
||||||
{
|
|
||||||
private $container;
|
|
||||||
private $ids;
|
|
||||||
|
|
||||||
public function __construct(Container $container, array $ids)
|
|
||||||
{
|
|
||||||
$this->container = $container;
|
|
||||||
$this->ids = $ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function rewind()
|
|
||||||
{
|
|
||||||
\reset($this->ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function current()
|
|
||||||
{
|
|
||||||
return $this->container[\current($this->ids)];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function key()
|
|
||||||
{
|
|
||||||
return \current($this->ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function next()
|
|
||||||
{
|
|
||||||
\next($this->ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function valid()
|
|
||||||
{
|
|
||||||
return null !== \key($this->ids);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pimple service provider interface.
|
|
||||||
*
|
|
||||||
* @author Fabien Potencier
|
|
||||||
* @author Dominik Zogg
|
|
||||||
*/
|
|
||||||
interface ServiceProviderInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Registers services on the given container.
|
|
||||||
*
|
|
||||||
* This method should only be used to configure services and parameters.
|
|
||||||
* It should not get services.
|
|
||||||
*
|
|
||||||
* @param Container $pimple A container instance
|
|
||||||
*/
|
|
||||||
public function register(Container $pimple);
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Fixtures;
|
|
||||||
|
|
||||||
class Invokable
|
|
||||||
{
|
|
||||||
public function __invoke($value = null)
|
|
||||||
{
|
|
||||||
$service = new Service();
|
|
||||||
$service->value = $value;
|
|
||||||
|
|
||||||
return $service;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Fixtures;
|
|
||||||
|
|
||||||
class NonInvokable
|
|
||||||
{
|
|
||||||
public function __call($a, $b)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Fixtures;
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\ServiceProviderInterface;
|
|
||||||
|
|
||||||
class PimpleServiceProvider implements ServiceProviderInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Registers services on the given container.
|
|
||||||
*
|
|
||||||
* This method should only be used to configure services and parameters.
|
|
||||||
* It should not get services.
|
|
||||||
*
|
|
||||||
* @param Container $pimple An Container instance
|
|
||||||
*/
|
|
||||||
public function register(Container $pimple)
|
|
||||||
{
|
|
||||||
$pimple['param'] = 'value';
|
|
||||||
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
|
|
||||||
$pimple['factory'] = $pimple->factory(function () {
|
|
||||||
return new Service();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Fixtures;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Igor Wiedler <igor@wiedler.ch>
|
|
||||||
*/
|
|
||||||
class Service
|
|
||||||
{
|
|
||||||
public $value;
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests;
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Dominik Zogg <dominik.zogg@gmail.com>
|
|
||||||
*/
|
|
||||||
class PimpleServiceProviderInterfaceTest extends \PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
public function testProvider()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
|
|
||||||
$pimpleServiceProvider = new Fixtures\PimpleServiceProvider();
|
|
||||||
$pimpleServiceProvider->register($pimple);
|
|
||||||
|
|
||||||
$this->assertEquals('value', $pimple['param']);
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
|
|
||||||
|
|
||||||
$serviceOne = $pimple['factory'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
|
|
||||||
$serviceTwo = $pimple['factory'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
|
|
||||||
$this->assertNotSame($serviceOne, $serviceTwo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testProviderWithRegisterMethod()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
|
|
||||||
$pimple->register(new Fixtures\PimpleServiceProvider(), array(
|
|
||||||
'anotherParameter' => 'anotherValue',
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertEquals('value', $pimple['param']);
|
|
||||||
$this->assertEquals('anotherValue', $pimple['anotherParameter']);
|
|
||||||
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
|
|
||||||
|
|
||||||
$serviceOne = $pimple['factory'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
|
|
||||||
$serviceTwo = $pimple['factory'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
|
|
||||||
$this->assertNotSame($serviceOne, $serviceTwo);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,589 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests;
|
|
||||||
|
|
||||||
use Pimple\Container;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Igor Wiedler <igor@wiedler.ch>
|
|
||||||
*/
|
|
||||||
class PimpleTest extends \PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
public function testWithString()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['param'] = 'value';
|
|
||||||
|
|
||||||
$this->assertEquals('value', $pimple['param']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testWithClosure()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testServicesShouldBeDifferent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = $pimple->factory(function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
});
|
|
||||||
|
|
||||||
$serviceOne = $pimple['service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
|
|
||||||
$serviceTwo = $pimple['service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
|
|
||||||
$this->assertNotSame($serviceOne, $serviceTwo);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testShouldPassContainerAsParameter()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$pimple['container'] = function ($container) {
|
|
||||||
return $container;
|
|
||||||
};
|
|
||||||
|
|
||||||
$this->assertNotSame($pimple, $pimple['service']);
|
|
||||||
$this->assertSame($pimple, $pimple['container']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsset()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['param'] = 'value';
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
|
|
||||||
$pimple['null'] = null;
|
|
||||||
|
|
||||||
$this->assertTrue(isset($pimple['param']));
|
|
||||||
$this->assertTrue(isset($pimple['service']));
|
|
||||||
$this->assertTrue(isset($pimple['null']));
|
|
||||||
$this->assertFalse(isset($pimple['non_existent']));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConstructorInjection()
|
|
||||||
{
|
|
||||||
$params = array('param' => 'value');
|
|
||||||
$pimple = new Container($params);
|
|
||||||
|
|
||||||
$this->assertSame($params['param'], $pimple['param']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testOffsetGetValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
echo $pimple['foo'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testLegacyOffsetGetValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
echo $pimple['foo'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOffsetGetHonorsNullValues()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = null;
|
|
||||||
$this->assertNull($pimple['foo']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testUnset()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['param'] = 'value';
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
|
|
||||||
unset($pimple['param'], $pimple['service']);
|
|
||||||
$this->assertFalse(isset($pimple['param']));
|
|
||||||
$this->assertFalse(isset($pimple['service']));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider serviceDefinitionProvider
|
|
||||||
*/
|
|
||||||
public function testShare($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['shared_service'] = $service;
|
|
||||||
|
|
||||||
$serviceOne = $pimple['shared_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
|
|
||||||
$serviceTwo = $pimple['shared_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
|
|
||||||
$this->assertSame($serviceOne, $serviceTwo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider serviceDefinitionProvider
|
|
||||||
*/
|
|
||||||
public function testProtect($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['protected'] = $pimple->protect($service);
|
|
||||||
|
|
||||||
$this->assertSame($service, $pimple['protected']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGlobalFunctionNameAsParameterValue()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['global_function'] = 'strlen';
|
|
||||||
$this->assertSame('strlen', $pimple['global_function']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRaw()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = $definition = $pimple->factory(function () { return 'foo'; });
|
|
||||||
$this->assertSame($definition, $pimple->raw('service'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRawHonorsNullValues()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = null;
|
|
||||||
$this->assertNull($pimple->raw('foo'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFluentRegister()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$this->assertSame($pimple, $pimple->register($this->getMockBuilder('Pimple\ServiceProviderInterface')->getMock()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testRawValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->raw('foo');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testLegacyRawValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->raw('foo');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider serviceDefinitionProvider
|
|
||||||
*/
|
|
||||||
public function testExtend($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['shared_service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$pimple['factory_service'] = $pimple->factory(function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
});
|
|
||||||
|
|
||||||
$pimple->extend('shared_service', $service);
|
|
||||||
$serviceOne = $pimple['shared_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
$serviceTwo = $pimple['shared_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
$this->assertSame($serviceOne, $serviceTwo);
|
|
||||||
$this->assertSame($serviceOne->value, $serviceTwo->value);
|
|
||||||
|
|
||||||
$pimple->extend('factory_service', $service);
|
|
||||||
$serviceOne = $pimple['factory_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
|
|
||||||
$serviceTwo = $pimple['factory_service'];
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
|
|
||||||
$this->assertNotSame($serviceOne, $serviceTwo);
|
|
||||||
$this->assertNotSame($serviceOne->value, $serviceTwo->value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testExtendDoesNotLeakWithFactories()
|
|
||||||
{
|
|
||||||
if (extension_loaded('pimple')) {
|
|
||||||
$this->markTestSkipped('Pimple extension does not support this test');
|
|
||||||
}
|
|
||||||
$pimple = new Container();
|
|
||||||
|
|
||||||
$pimple['foo'] = $pimple->factory(function () { return; });
|
|
||||||
$pimple['foo'] = $pimple->extend('foo', function ($foo, $pimple) { return; });
|
|
||||||
unset($pimple['foo']);
|
|
||||||
|
|
||||||
$p = new \ReflectionProperty($pimple, 'values');
|
|
||||||
$p->setAccessible(true);
|
|
||||||
$this->assertEmpty($p->getValue($pimple));
|
|
||||||
|
|
||||||
$p = new \ReflectionProperty($pimple, 'factories');
|
|
||||||
$p->setAccessible(true);
|
|
||||||
$this->assertCount(0, $p->getValue($pimple));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testExtendValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testLegacyExtendValidatesKeyIsPresent()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testKeys()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = 123;
|
|
||||||
$pimple['bar'] = 123;
|
|
||||||
|
|
||||||
$this->assertEquals(array('foo', 'bar'), $pimple->keys());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function settingAnInvokableObjectShouldTreatItAsFactory()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['invokable'] = new Fixtures\Invokable();
|
|
||||||
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['invokable']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @test */
|
|
||||||
public function settingNonInvokableObjectShouldTreatItAsParameter()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['non_invokable'] = new Fixtures\NonInvokable();
|
|
||||||
|
|
||||||
$this->assertInstanceOf('Pimple\Tests\Fixtures\NonInvokable', $pimple['non_invokable']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \Pimple\Exception\ExpectedInvokableException
|
|
||||||
* @expectedExceptionMessage Service definition is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testFactoryFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->factory($service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Service definition is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testLegacyFactoryFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->factory($service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \Pimple\Exception\ExpectedInvokableException
|
|
||||||
* @expectedExceptionMessage Callable is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testProtectFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->protect($service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Callable is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testLegacyProtectFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple->protect($service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \Pimple\Exception\InvalidServiceIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" does not contain an object definition.
|
|
||||||
*/
|
|
||||||
public function testExtendFailsForKeysNotContainingServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = $service;
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" does not contain an object definition.
|
|
||||||
*/
|
|
||||||
public function testLegacyExtendFailsForKeysNotContainingServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = $service;
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @expectedDeprecation How Pimple behaves when extending protected closures will be fixed in Pimple 4. Are you sure "foo" should be protected?
|
|
||||||
*/
|
|
||||||
public function testExtendingProtectedClosureDeprecation()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = $pimple->protect(function () {
|
|
||||||
return 'bar';
|
|
||||||
});
|
|
||||||
|
|
||||||
$pimple->extend('foo', function ($value) {
|
|
||||||
return $value.'-baz';
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->assertSame('bar-baz', $pimple['foo']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \Pimple\Exception\ExpectedInvokableException
|
|
||||||
* @expectedExceptionMessage Extension service definition is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testExtendFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {};
|
|
||||||
$pimple->extend('foo', $service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @dataProvider badServiceDefinitionProvider
|
|
||||||
* @expectedException \InvalidArgumentException
|
|
||||||
* @expectedExceptionMessage Extension service definition is not a Closure or invokable object.
|
|
||||||
*/
|
|
||||||
public function testLegacyExtendFailsForInvalidServiceDefinitions($service)
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {};
|
|
||||||
$pimple->extend('foo', $service);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\FrozenServiceException
|
|
||||||
* @expectedExceptionMessage Cannot override frozen service "foo".
|
|
||||||
*/
|
|
||||||
public function testExtendFailsIfFrozenServiceIsNonInvokable()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return new Fixtures\NonInvokable();
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\FrozenServiceException
|
|
||||||
* @expectedExceptionMessage Cannot override frozen service "foo".
|
|
||||||
*/
|
|
||||||
public function testExtendFailsIfFrozenServiceIsInvokable()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return new Fixtures\Invokable();
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple->extend('foo', function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provider for invalid service definitions.
|
|
||||||
*/
|
|
||||||
public function badServiceDefinitionProvider()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
array(123),
|
|
||||||
array(new Fixtures\NonInvokable()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provider for service definitions.
|
|
||||||
*/
|
|
||||||
public function serviceDefinitionProvider()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
array(function ($value) {
|
|
||||||
$service = new Fixtures\Service();
|
|
||||||
$service->value = $value;
|
|
||||||
|
|
||||||
return $service;
|
|
||||||
}),
|
|
||||||
array(new Fixtures\Invokable()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDefiningNewServiceAfterFreeze()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple['bar'] = function () {
|
|
||||||
return 'bar';
|
|
||||||
};
|
|
||||||
$this->assertSame('bar', $pimple['bar']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\FrozenServiceException
|
|
||||||
* @expectedExceptionMessage Cannot override frozen service "foo".
|
|
||||||
*/
|
|
||||||
public function testOverridingServiceAfterFreeze()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'bar';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @group legacy
|
|
||||||
* @expectedException \RuntimeException
|
|
||||||
* @expectedExceptionMessage Cannot override frozen service "foo".
|
|
||||||
*/
|
|
||||||
public function testLegacyOverridingServiceAfterFreeze()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'bar';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRemovingServiceAfterFreeze()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
unset($pimple['foo']);
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'bar';
|
|
||||||
};
|
|
||||||
$this->assertSame('bar', $pimple['foo']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testExtendingService()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$pimple['foo'] = $pimple->extend('foo', function ($foo, $app) {
|
|
||||||
return "$foo.bar";
|
|
||||||
});
|
|
||||||
$pimple['foo'] = $pimple->extend('foo', function ($foo, $app) {
|
|
||||||
return "$foo.baz";
|
|
||||||
});
|
|
||||||
$this->assertSame('foo.bar.baz', $pimple['foo']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testExtendingServiceAfterOtherServiceFreeze()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['foo'] = function () {
|
|
||||||
return 'foo';
|
|
||||||
};
|
|
||||||
$pimple['bar'] = function () {
|
|
||||||
return 'bar';
|
|
||||||
};
|
|
||||||
$foo = $pimple['foo'];
|
|
||||||
|
|
||||||
$pimple['bar'] = $pimple->extend('bar', function ($bar, $app) {
|
|
||||||
return "$bar.baz";
|
|
||||||
});
|
|
||||||
$this->assertSame('bar.baz', $pimple['bar']);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009-2017 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Psr11;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\Psr11\Container as PsrContainer;
|
|
||||||
use Pimple\Tests\Fixtures\Service;
|
|
||||||
|
|
||||||
class ContainerTest extends TestCase
|
|
||||||
{
|
|
||||||
public function testGetReturnsExistingService()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$psr = new PsrContainer($pimple);
|
|
||||||
|
|
||||||
$this->assertSame($pimple['service'], $psr->get('service'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Psr\Container\NotFoundExceptionInterface
|
|
||||||
* @expectedExceptionMessage Identifier "service" is not defined.
|
|
||||||
*/
|
|
||||||
public function testGetThrowsExceptionIfServiceIsNotFound()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$psr = new PsrContainer($pimple);
|
|
||||||
|
|
||||||
$psr->get('service');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasReturnsTrueIfServiceExists()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$psr = new PsrContainer($pimple);
|
|
||||||
|
|
||||||
$this->assertTrue($psr->has('service'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasReturnsFalseIfServiceDoesNotExist()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$psr = new PsrContainer($pimple);
|
|
||||||
|
|
||||||
$this->assertFalse($psr->has('service'));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,134 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests\Psr11;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\Psr11\ServiceLocator;
|
|
||||||
use Pimple\Tests\Fixtures;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ServiceLocator test case.
|
|
||||||
*
|
|
||||||
* @author Pascal Luna <skalpa@zetareticuli.org>
|
|
||||||
*/
|
|
||||||
class ServiceLocatorTest extends TestCase
|
|
||||||
{
|
|
||||||
public function testCanAccessServices()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('service'));
|
|
||||||
|
|
||||||
$this->assertSame($pimple['service'], $locator->get('service'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanAccessAliasedServices()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('alias' => 'service'));
|
|
||||||
|
|
||||||
$this->assertSame($pimple['service'], $locator->get('alias'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "service" is not defined.
|
|
||||||
*/
|
|
||||||
public function testCannotAccessAliasedServiceUsingRealIdentifier()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('alias' => 'service'));
|
|
||||||
|
|
||||||
$service = $locator->get('service');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "foo" is not defined.
|
|
||||||
*/
|
|
||||||
public function testGetValidatesServiceCanBeLocated()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('alias' => 'service'));
|
|
||||||
|
|
||||||
$service = $locator->get('foo');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \Pimple\Exception\UnknownIdentifierException
|
|
||||||
* @expectedExceptionMessage Identifier "invalid" is not defined.
|
|
||||||
*/
|
|
||||||
public function testGetValidatesTargetServiceExists()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('alias' => 'invalid'));
|
|
||||||
|
|
||||||
$service = $locator->get('alias');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasValidatesServiceCanBeLocated()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service1'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$pimple['service2'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('service1'));
|
|
||||||
|
|
||||||
$this->assertTrue($locator->has('service1'));
|
|
||||||
$this->assertFalse($locator->has('service2'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHasChecksIfTargetServiceExists()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service'] = function () {
|
|
||||||
return new Fixtures\Service();
|
|
||||||
};
|
|
||||||
$locator = new ServiceLocator($pimple, array('foo' => 'service', 'bar' => 'invalid'));
|
|
||||||
|
|
||||||
$this->assertTrue($locator->has('foo'));
|
|
||||||
$this->assertFalse($locator->has('bar'));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Pimple.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009 Fabien Potencier
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
* to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Pimple\Tests;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Pimple\Container;
|
|
||||||
use Pimple\ServiceIterator;
|
|
||||||
use Pimple\Tests\Fixtures\Service;
|
|
||||||
|
|
||||||
class ServiceIteratorTest extends TestCase
|
|
||||||
{
|
|
||||||
public function testIsIterable()
|
|
||||||
{
|
|
||||||
$pimple = new Container();
|
|
||||||
$pimple['service1'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$pimple['service2'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$pimple['service3'] = function () {
|
|
||||||
return new Service();
|
|
||||||
};
|
|
||||||
$iterator = new ServiceIterator($pimple, array('service1', 'service2'));
|
|
||||||
|
|
||||||
$this->assertSame(array('service1' => $pimple['service1'], 'service2' => $pimple['service2']), iterator_to_array($iterator));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,13 @@
|
||||||
# PSR Container
|
Container interface
|
||||||
|
==============
|
||||||
|
|
||||||
This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md).
|
This repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url].
|
||||||
|
|
||||||
|
Note that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container.
|
||||||
|
|
||||||
|
The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
|
||||||
|
|
||||||
|
[psr-url]: https://www.php-fig.org/psr/psr-11/
|
||||||
|
[package-url]: https://packagist.org/packages/psr/container
|
||||||
|
[implementation-url]: https://packagist.org/providers/psr/container-implementation
|
||||||
|
|
||||||
Note that this is not a container implementation of its own. See the specification for more details.
|
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "PHP-FIG",
|
"name": "PHP-FIG",
|
||||||
"homepage": "http://www.php-fig.org/"
|
"homepage": "https://www.php-fig.org/"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "2.0.x-dev"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Psr\Container;
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base interface representing a generic exception in a container.
|
* Base interface representing a generic exception in a container.
|
||||||
*/
|
*/
|
||||||
interface ContainerExceptionInterface
|
interface ContainerExceptionInterface extends Throwable
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
declare(strict_types=1);
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Psr\Container;
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
@ -20,7 +19,7 @@ interface ContainerInterface
|
||||||
*
|
*
|
||||||
* @return mixed Entry.
|
* @return mixed Entry.
|
||||||
*/
|
*/
|
||||||
public function get($id);
|
public function get(string $id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the container can return an entry for the given identifier.
|
* Returns true if the container can return an entry for the given identifier.
|
||||||
|
@ -33,5 +32,5 @@ interface ContainerInterface
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function has($id);
|
public function has(string $id): bool;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Psr\Container;
|
namespace Psr\Container;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
Copyright (c) 2009-2017 Fabien Potencier
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 PHP-FIG
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
in the Software without restriction, including without limitation the rights
|
in the Software without restriction, including without limitation the rights
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the Software is furnished
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
to do so, subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
|
@ -15,5 +17,5 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
THE SOFTWARE.
|
SOFTWARE.
|
|
@ -0,0 +1,12 @@
|
||||||
|
HTTP Factories
|
||||||
|
==============
|
||||||
|
|
||||||
|
This repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url].
|
||||||
|
|
||||||
|
Note that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory.
|
||||||
|
|
||||||
|
The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.
|
||||||
|
|
||||||
|
[psr-url]: https://www.php-fig.org/psr/psr-17/
|
||||||
|
[package-url]: https://packagist.org/packages/psr/http-factory
|
||||||
|
[implementation-url]: https://packagist.org/providers/psr/http-factory-implementation
|
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"name": "psr/http-factory",
|
||||||
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
|
"keywords": [
|
||||||
|
"psr",
|
||||||
|
"psr-7",
|
||||||
|
"psr-17",
|
||||||
|
"http",
|
||||||
|
"factory",
|
||||||
|
"message",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
advancedcontentfilter/vendor/psr/http-factory/src/RequestFactoryInterface.php
vendored
Normal file
18
advancedcontentfilter/vendor/psr/http-factory/src/RequestFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface RequestFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new request.
|
||||||
|
*
|
||||||
|
* @param string $method The HTTP method associated with the request.
|
||||||
|
* @param UriInterface|string $uri The URI associated with the request. If
|
||||||
|
* the value is a string, the factory MUST create a UriInterface
|
||||||
|
* instance based on it.
|
||||||
|
*
|
||||||
|
* @return RequestInterface
|
||||||
|
*/
|
||||||
|
public function createRequest(string $method, $uri): RequestInterface;
|
||||||
|
}
|
18
advancedcontentfilter/vendor/psr/http-factory/src/ResponseFactoryInterface.php
vendored
Normal file
18
advancedcontentfilter/vendor/psr/http-factory/src/ResponseFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface ResponseFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new response.
|
||||||
|
*
|
||||||
|
* @param int $code HTTP status code; defaults to 200
|
||||||
|
* @param string $reasonPhrase Reason phrase to associate with status code
|
||||||
|
* in generated response; if none is provided implementations MAY use
|
||||||
|
* the defaults as suggested in the HTTP specification.
|
||||||
|
*
|
||||||
|
* @return ResponseInterface
|
||||||
|
*/
|
||||||
|
public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface;
|
||||||
|
}
|
24
advancedcontentfilter/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
vendored
Normal file
24
advancedcontentfilter/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface ServerRequestFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new server request.
|
||||||
|
*
|
||||||
|
* Note that server-params are taken precisely as given - no parsing/processing
|
||||||
|
* of the given values is performed, and, in particular, no attempt is made to
|
||||||
|
* determine the HTTP method or URI, which must be provided explicitly.
|
||||||
|
*
|
||||||
|
* @param string $method The HTTP method associated with the request.
|
||||||
|
* @param UriInterface|string $uri The URI associated with the request. If
|
||||||
|
* the value is a string, the factory MUST create a UriInterface
|
||||||
|
* instance based on it.
|
||||||
|
* @param array $serverParams Array of SAPI parameters with which to seed
|
||||||
|
* the generated request instance.
|
||||||
|
*
|
||||||
|
* @return ServerRequestInterface
|
||||||
|
*/
|
||||||
|
public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface;
|
||||||
|
}
|
45
advancedcontentfilter/vendor/psr/http-factory/src/StreamFactoryInterface.php
vendored
Normal file
45
advancedcontentfilter/vendor/psr/http-factory/src/StreamFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface StreamFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new stream from a string.
|
||||||
|
*
|
||||||
|
* The stream SHOULD be created with a temporary resource.
|
||||||
|
*
|
||||||
|
* @param string $content String content with which to populate the stream.
|
||||||
|
*
|
||||||
|
* @return StreamInterface
|
||||||
|
*/
|
||||||
|
public function createStream(string $content = ''): StreamInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a stream from an existing file.
|
||||||
|
*
|
||||||
|
* The file MUST be opened using the given mode, which may be any mode
|
||||||
|
* supported by the `fopen` function.
|
||||||
|
*
|
||||||
|
* The `$filename` MAY be any string supported by `fopen()`.
|
||||||
|
*
|
||||||
|
* @param string $filename Filename or stream URI to use as basis of stream.
|
||||||
|
* @param string $mode Mode with which to open the underlying filename/stream.
|
||||||
|
*
|
||||||
|
* @return StreamInterface
|
||||||
|
* @throws \RuntimeException If the file cannot be opened.
|
||||||
|
* @throws \InvalidArgumentException If the mode is invalid.
|
||||||
|
*/
|
||||||
|
public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new stream from an existing resource.
|
||||||
|
*
|
||||||
|
* The stream MUST be readable and may be writable.
|
||||||
|
*
|
||||||
|
* @param resource $resource PHP resource to use as basis of stream.
|
||||||
|
*
|
||||||
|
* @return StreamInterface
|
||||||
|
*/
|
||||||
|
public function createStreamFromResource($resource): StreamInterface;
|
||||||
|
}
|
34
advancedcontentfilter/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
vendored
Normal file
34
advancedcontentfilter/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface UploadedFileFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new uploaded file.
|
||||||
|
*
|
||||||
|
* If a size is not provided it will be determined by checking the size of
|
||||||
|
* the file.
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/features.file-upload.post-method.php
|
||||||
|
* @see http://php.net/manual/features.file-upload.errors.php
|
||||||
|
*
|
||||||
|
* @param StreamInterface $stream Underlying stream representing the
|
||||||
|
* uploaded file content.
|
||||||
|
* @param int $size in bytes
|
||||||
|
* @param int $error PHP file upload error
|
||||||
|
* @param string $clientFilename Filename as provided by the client, if any.
|
||||||
|
* @param string $clientMediaType Media type as provided by the client, if any.
|
||||||
|
*
|
||||||
|
* @return UploadedFileInterface
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException If the file resource is not readable.
|
||||||
|
*/
|
||||||
|
public function createUploadedFile(
|
||||||
|
StreamInterface $stream,
|
||||||
|
int $size = null,
|
||||||
|
int $error = \UPLOAD_ERR_OK,
|
||||||
|
string $clientFilename = null,
|
||||||
|
string $clientMediaType = null
|
||||||
|
): UploadedFileInterface;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
interface UriFactoryInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Create a new URI.
|
||||||
|
*
|
||||||
|
* @param string $uri
|
||||||
|
*
|
||||||
|
* @return UriInterface
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException If the given URI cannot be parsed.
|
||||||
|
*/
|
||||||
|
public function createUri(string $uri = ''): UriInterface;
|
||||||
|
}
|
|
@ -10,4 +10,7 @@ interface that describes a HTTP message. See the specification for more details.
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
We'll certainly need some stuff in here.
|
Before reading the usage guide we recommend reading the PSR-7 interfaces method list:
|
||||||
|
|
||||||
|
* [`PSR-7 Interfaces Method List`](docs/PSR7-Interfaces.md)
|
||||||
|
* [`PSR-7 Usage Guide`](docs/PSR7-Usage.md)
|
|
@ -11,7 +11,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0"
|
"php": "^7.2 || ^8.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.0.x-dev"
|
"dev-master": "1.1.x-dev"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,130 @@
|
||||||
|
# Interfaces
|
||||||
|
|
||||||
|
The purpose of this list is to help in finding the methods when working with PSR-7. This can be considered as a cheatsheet for PSR-7 interfaces.
|
||||||
|
|
||||||
|
The interfaces defined in PSR-7 are the following:
|
||||||
|
|
||||||
|
| Class Name | Description |
|
||||||
|
|---|---|
|
||||||
|
| [Psr\Http\Message\MessageInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagemessageinterface) | Representation of a HTTP message |
|
||||||
|
| [Psr\Http\Message\RequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagerequestinterface) | Representation of an outgoing, client-side request. |
|
||||||
|
| [Psr\Http\Message\ServerRequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageserverrequestinterface) | Representation of an incoming, server-side HTTP request. |
|
||||||
|
| [Psr\Http\Message\ResponseInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageresponseinterface) | Representation of an outgoing, server-side response. |
|
||||||
|
| [Psr\Http\Message\StreamInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagestreaminterface) | Describes a data stream |
|
||||||
|
| [Psr\Http\Message\UriInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuriinterface) | Value object representing a URI. |
|
||||||
|
| [Psr\Http\Message\UploadedFileInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuploadedfileinterface) | Value object representing a file uploaded through an HTTP request. |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\MessageInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getProtocolVersion()` | Retrieve HTTP protocol version | 1.0 or 1.1 |
|
||||||
|
| `withProtocolVersion($version)` | Returns new message instance with given HTTP protocol version | |
|
||||||
|
| `getHeaders()` | Retrieve all HTTP Headers | [Request Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields), [Response Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields) |
|
||||||
|
| `hasHeader($name)` | Checks if HTTP Header with given name exists | |
|
||||||
|
| `getHeader($name)` | Retrieves a array with the values for a single header | |
|
||||||
|
| `getHeaderLine($name)` | Retrieves a comma-separated string of the values for a single header | |
|
||||||
|
| `withHeader($name, $value)` | Returns new message instance with given HTTP Header | if the header existed in the original instance, replaces the header value from the original message with the value provided when creating the new instance. |
|
||||||
|
| `withAddedHeader($name, $value)` | Returns new message instance with appended value to given header | If header already exists value will be appended, if not a new header will be created |
|
||||||
|
| `withoutHeader($name)` | Removes HTTP Header with given name| |
|
||||||
|
| `getBody()` | Retrieves the HTTP Message Body | Returns object implementing `StreamInterface`|
|
||||||
|
| `withBody(StreamInterface $body)` | Returns new message instance with given HTTP Message Body | |
|
||||||
|
|
||||||
|
|
||||||
|
## `Psr\Http\Message\RequestInterface` Methods
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getRequestTarget()` | Retrieves the message's request target | origin-form, absolute-form, authority-form, asterisk-form ([RFC7230](https://www.rfc-editor.org/rfc/rfc7230.txt)) |
|
||||||
|
| `withRequestTarget($requestTarget)` | Return a new message instance with the specific request-target | |
|
||||||
|
| `getMethod()` | Retrieves the HTTP method of the request. | GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (defined in [RFC7231](https://tools.ietf.org/html/rfc7231)), PATCH (defined in [RFC5789](https://tools.ietf.org/html/rfc5789)) |
|
||||||
|
| `withMethod($method)` | Returns a new message instance with the provided HTTP method | |
|
||||||
|
| `getUri()` | Retrieves the URI instance | |
|
||||||
|
| `withUri(UriInterface $uri, $preserveHost = false)` | Returns a new message instance with the provided URI | |
|
||||||
|
|
||||||
|
|
||||||
|
## `Psr\Http\Message\ServerRequestInterface` Methods
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\RequestInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getServerParams() ` | Retrieve server parameters | Typically derived from `$_SERVER` |
|
||||||
|
| `getCookieParams()` | Retrieves cookies sent by the client to the server. | Typically derived from `$_COOKIES` |
|
||||||
|
| `withCookieParams(array $cookies)` | Returns a new request instance with the specified cookies | |
|
||||||
|
| `withQueryParams(array $query)` | Returns a new request instance with the specified query string arguments | |
|
||||||
|
| `getUploadedFiles()` | Retrieve normalized file upload data | |
|
||||||
|
| `withUploadedFiles(array $uploadedFiles)` | Returns a new request instance with the specified uploaded files | |
|
||||||
|
| `getParsedBody()` | Retrieve any parameters provided in the request body | |
|
||||||
|
| `withParsedBody($data)` | Returns a new request instance with the specified body parameters | |
|
||||||
|
| `getAttributes()` | Retrieve attributes derived from the request | |
|
||||||
|
| `getAttribute($name, $default = null)` | Retrieve a single derived request attribute | |
|
||||||
|
| `withAttribute($name, $value)` | Returns a new request instance with the specified derived request attribute | |
|
||||||
|
| `withoutAttribute($name)` | Returns a new request instance that without the specified derived request attribute | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\ResponseInterface` Methods:
|
||||||
|
|
||||||
|
Same methods as `Psr\Http\Message\MessageInterface` + the following methods:
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getStatusCode()` | Gets the response status code. | |
|
||||||
|
| `withStatus($code, $reasonPhrase = '')` | Returns a new response instance with the specified status code and, optionally, reason phrase. | |
|
||||||
|
| `getReasonPhrase()` | Gets the response reason phrase associated with the status code. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\StreamInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `__toString()` | Reads all data from the stream into a string, from the beginning to end. | |
|
||||||
|
| `close()` | Closes the stream and any underlying resources. | |
|
||||||
|
| `detach()` | Separates any underlying resources from the stream. | |
|
||||||
|
| `getSize()` | Get the size of the stream if known. | |
|
||||||
|
| `eof()` | Returns true if the stream is at the end of the stream.| |
|
||||||
|
| `isSeekable()` | Returns whether or not the stream is seekable. | |
|
||||||
|
| `seek($offset, $whence = SEEK_SET)` | Seek to a position in the stream. | |
|
||||||
|
| `rewind()` | Seek to the beginning of the stream. | |
|
||||||
|
| `isWritable()` | Returns whether or not the stream is writable. | |
|
||||||
|
| `write($string)` | Write data to the stream. | |
|
||||||
|
| `isReadable()` | Returns whether or not the stream is readable. | |
|
||||||
|
| `read($length)` | Read data from the stream. | |
|
||||||
|
| `getContents()` | Returns the remaining contents in a string | |
|
||||||
|
| `getMetadata($key = null)()` | Get stream metadata as an associative array or retrieve a specific key. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\UriInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getScheme()` | Retrieve the scheme component of the URI. | |
|
||||||
|
| `getAuthority()` | Retrieve the authority component of the URI. | |
|
||||||
|
| `getUserInfo()` | Retrieve the user information component of the URI. | |
|
||||||
|
| `getHost()` | Retrieve the host component of the URI. | |
|
||||||
|
| `getPort()` | Retrieve the port component of the URI. | |
|
||||||
|
| `getPath()` | Retrieve the path component of the URI. | |
|
||||||
|
| `getQuery()` | Retrieve the query string of the URI. | |
|
||||||
|
| `getFragment()` | Retrieve the fragment component of the URI. | |
|
||||||
|
| `withScheme($scheme)` | Return an instance with the specified scheme. | |
|
||||||
|
| `withUserInfo($user, $password = null)` | Return an instance with the specified user information. | |
|
||||||
|
| `withHost($host)` | Return an instance with the specified host. | |
|
||||||
|
| `withPort($port)` | Return an instance with the specified port. | |
|
||||||
|
| `withPath($path)` | Return an instance with the specified path. | |
|
||||||
|
| `withQuery($query)` | Return an instance with the specified query string. | |
|
||||||
|
| `withFragment($fragment)` | Return an instance with the specified URI fragment. | |
|
||||||
|
| `__toString()` | Return the string representation as a URI reference. | |
|
||||||
|
|
||||||
|
## `Psr\Http\Message\UploadedFileInterface` Methods
|
||||||
|
|
||||||
|
| Method Name | Description | Notes |
|
||||||
|
|------------------------------------| ----------- | ----- |
|
||||||
|
| `getStream()` | Retrieve a stream representing the uploaded file. | |
|
||||||
|
| `moveTo($targetPath)` | Move the uploaded file to a new location. | |
|
||||||
|
| `getSize()` | Retrieve the file size. | |
|
||||||
|
| `getError()` | Retrieve the error associated with the uploaded file. | |
|
||||||
|
| `getClientFilename()` | Retrieve the filename sent by the client. | |
|
||||||
|
| `getClientMediaType()` | Retrieve the media type sent by the client. | |
|
||||||
|
|
||||||
|
> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
|
||||||
|
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
### PSR-7 Usage
|
||||||
|
|
||||||
|
All PSR-7 applications comply with these interfaces
|
||||||
|
They were created to establish a standard between middleware implementations.
|
||||||
|
|
||||||
|
> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface` because the `Request` and the `Response` are `HTTP Messages`.
|
||||||
|
> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\Http\Message\MessageInterface` methods are considered.
|
||||||
|
|
||||||
|
|
||||||
|
The following examples will illustrate how basic operations are done in PSR-7.
|
||||||
|
|
||||||
|
##### Examples
|
||||||
|
|
||||||
|
|
||||||
|
For this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc)
|
||||||
|
All PSR-7 implementations should have the same behaviour.
|
||||||
|
|
||||||
|
The following will be assumed:
|
||||||
|
`$request` is an object of `Psr\Http\Message\RequestInterface` and
|
||||||
|
|
||||||
|
`$response` is an object implementing `Psr\Http\Message\RequestInterface`
|
||||||
|
|
||||||
|
|
||||||
|
### Working with HTTP Headers
|
||||||
|
|
||||||
|
#### Adding headers to response:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->withHeader('My-Custom-Header', 'My Custom Message');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Appending values to headers
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->withAddedHeader('My-Custom-Header', 'The second message');
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Checking if header exists:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$request->hasHeader('My-Custom-Header'); // will return false
|
||||||
|
$response->hasHeader('My-Custom-Header'); // will return true
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: My-Custom-Header was only added in the Response
|
||||||
|
|
||||||
|
#### Getting comma-separated values from a header (also applies to request)
|
||||||
|
|
||||||
|
```php
|
||||||
|
// getting value from request headers
|
||||||
|
$request->getHeaderLine('Content-Type'); // will return: "text/html; charset=UTF-8"
|
||||||
|
// getting value from response headers
|
||||||
|
$response->getHeaderLine('My-Custom-Header'); // will return: "My Custom Message; The second message"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Getting array of value from a header (also applies to request)
|
||||||
|
```php
|
||||||
|
// getting value from request headers
|
||||||
|
$request->getHeader('Content-Type'); // will return: ["text/html", "charset=UTF-8"]
|
||||||
|
// getting value from response headers
|
||||||
|
$response->getHeader('My-Custom-Header'); // will return: ["My Custom Message", "The second message"]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Removing headers from HTTP Messages
|
||||||
|
```php
|
||||||
|
// removing a header from Request, removing deprecated "Content-MD5" header
|
||||||
|
$request->withoutHeader('Content-MD5');
|
||||||
|
|
||||||
|
// removing a header from Response
|
||||||
|
// effect: the browser won't know the size of the stream
|
||||||
|
// the browser will download the stream till it ends
|
||||||
|
$response->withoutHeader('Content-Length');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Working with HTTP Message Body
|
||||||
|
|
||||||
|
When working with the PSR-7 there are two methods of implementation:
|
||||||
|
#### 1. Getting the body separately
|
||||||
|
|
||||||
|
> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented.
|
||||||
|
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
// operations on body, eg. read, write, seek
|
||||||
|
// ...
|
||||||
|
// replacing the old body
|
||||||
|
$response->withBody($body);
|
||||||
|
// this last statement is optional as we working with objects
|
||||||
|
// in this case the "new" body is same with the "old" one
|
||||||
|
// the $body variable has the same value as the one in $request, only the reference is passed
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. Working directly on response
|
||||||
|
|
||||||
|
> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->getBody()->write('hello');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Getting the body contents
|
||||||
|
|
||||||
|
The following snippet gets the contents of a stream contents.
|
||||||
|
> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\0` - meaning end of stream.
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind(); // or $body->seek(0);
|
||||||
|
$bodyText = $body->getContents();
|
||||||
|
```
|
||||||
|
> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended.
|
||||||
|
|
||||||
|
### Append to body
|
||||||
|
|
||||||
|
```php
|
||||||
|
$response->getBody()->write('Hello'); // writing directly
|
||||||
|
$body = $request->getBody(); // which is a `StreamInterface`
|
||||||
|
$body->write('xxxxx');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prepend to body
|
||||||
|
Prepending is different when it comes to streams. The content must be copied before writing the content to be prepended.
|
||||||
|
The following example will explain the behaviour of streams.
|
||||||
|
|
||||||
|
```php
|
||||||
|
// assuming our response is initially empty
|
||||||
|
$body = $repsonse->getBody();
|
||||||
|
// writing the string "abcd"
|
||||||
|
$body->write('abcd');
|
||||||
|
|
||||||
|
// seeking to start of stream
|
||||||
|
$body->seek(0);
|
||||||
|
// writing 'ef'
|
||||||
|
$body->write('ef'); // at this point the stream contains "efcd"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Prepending by rewriting separately
|
||||||
|
|
||||||
|
```php
|
||||||
|
// assuming our response body stream only contains: "abcd"
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind();
|
||||||
|
$contents = $body->getContents(); // abcd
|
||||||
|
// seeking the stream to beginning
|
||||||
|
$body->rewind();
|
||||||
|
$body->write('ef'); // stream contains "efcd"
|
||||||
|
$body->write($contents); // stream contains "efabcd"
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`.
|
||||||
|
|
||||||
|
#### Prepending by using contents as a string
|
||||||
|
```php
|
||||||
|
$body = $response->getBody();
|
||||||
|
$body->rewind();
|
||||||
|
$contents = $body->getContents(); // efabcd
|
||||||
|
$contents = 'ef'.$contents;
|
||||||
|
$body->rewind();
|
||||||
|
$body->write($contents);
|
||||||
|
```
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Psr\Http\Message;
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,7 +40,7 @@ interface MessageInterface
|
||||||
* @param string $version HTTP protocol version
|
* @param string $version HTTP protocol version
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
public function withProtocolVersion($version);
|
public function withProtocolVersion(string $version);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves all message header values.
|
* Retrieves all message header values.
|
||||||
|
@ -75,7 +77,7 @@ interface MessageInterface
|
||||||
* name using a case-insensitive string comparison. Returns false if
|
* name using a case-insensitive string comparison. Returns false if
|
||||||
* no matching header name is found in the message.
|
* no matching header name is found in the message.
|
||||||
*/
|
*/
|
||||||
public function hasHeader($name);
|
public function hasHeader(string $name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a message header value by the given case-insensitive name.
|
* Retrieves a message header value by the given case-insensitive name.
|
||||||
|
@ -91,7 +93,7 @@ interface MessageInterface
|
||||||
* header. If the header does not appear in the message, this method MUST
|
* header. If the header does not appear in the message, this method MUST
|
||||||
* return an empty array.
|
* return an empty array.
|
||||||
*/
|
*/
|
||||||
public function getHeader($name);
|
public function getHeader(string $name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves a comma-separated string of the values for a single header.
|
* Retrieves a comma-separated string of the values for a single header.
|
||||||
|
@ -112,7 +114,7 @@ interface MessageInterface
|
||||||
* concatenated together using a comma. If the header does not appear in
|
* concatenated together using a comma. If the header does not appear in
|
||||||
* the message, this method MUST return an empty string.
|
* the message, this method MUST return an empty string.
|
||||||
*/
|
*/
|
||||||
public function getHeaderLine($name);
|
public function getHeaderLine(string $name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an instance with the provided value replacing the specified header.
|
* Return an instance with the provided value replacing the specified header.
|
||||||
|
@ -129,7 +131,7 @@ interface MessageInterface
|
||||||
* @return static
|
* @return static
|
||||||
* @throws \InvalidArgumentException for invalid header names or values.
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
*/
|
*/
|
||||||
public function withHeader($name, $value);
|
public function withHeader(string $name, $value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an instance with the specified header appended with the given value.
|
* Return an instance with the specified header appended with the given value.
|
||||||
|
@ -147,7 +149,7 @@ interface MessageInterface
|
||||||
* @return static
|
* @return static
|
||||||
* @throws \InvalidArgumentException for invalid header names or values.
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
*/
|
*/
|
||||||
public function withAddedHeader($name, $value);
|
public function withAddedHeader(string $name, $value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an instance without the specified header.
|
* Return an instance without the specified header.
|
||||||
|
@ -161,7 +163,7 @@ interface MessageInterface
|
||||||
* @param string $name Case-insensitive header field name to remove.
|
* @param string $name Case-insensitive header field name to remove.
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
public function withoutHeader($name);
|
public function withoutHeader(string $name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the body of the message.
|
* Gets the body of the message.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Psr\Http\Message;
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,10 +57,10 @@ interface RequestInterface extends MessageInterface
|
||||||
*
|
*
|
||||||
* @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
|
* @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
|
||||||
* request-target forms allowed in request messages)
|
* request-target forms allowed in request messages)
|
||||||
* @param mixed $requestTarget
|
* @param string $requestTarget
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
public function withRequestTarget($requestTarget);
|
public function withRequestTarget(string $requestTarget);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the HTTP method of the request.
|
* Retrieves the HTTP method of the request.
|
||||||
|
@ -82,7 +84,7 @@ interface RequestInterface extends MessageInterface
|
||||||
* @return static
|
* @return static
|
||||||
* @throws \InvalidArgumentException for invalid HTTP methods.
|
* @throws \InvalidArgumentException for invalid HTTP methods.
|
||||||
*/
|
*/
|
||||||
public function withMethod($method);
|
public function withMethod(string $method);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the URI instance.
|
* Retrieves the URI instance.
|
||||||
|
@ -125,5 +127,5 @@ interface RequestInterface extends MessageInterface
|
||||||
* @param bool $preserveHost Preserve the original state of the Host header.
|
* @param bool $preserveHost Preserve the original state of the Host header.
|
||||||
* @return static
|
* @return static
|
||||||
*/
|
*/
|
||||||
public function withUri(UriInterface $uri, $preserveHost = false);
|
public function withUri(UriInterface $uri, bool $preserveHost = false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Psr\Http\Message;
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,7 +51,7 @@ interface ResponseInterface extends MessageInterface
|
||||||
* @return static
|
* @return static
|
||||||
* @throws \InvalidArgumentException For invalid status code arguments.
|
* @throws \InvalidArgumentException For invalid status code arguments.
|
||||||
*/
|
*/
|
||||||
public function withStatus($code, $reasonPhrase = '');
|
public function withStatus(int $code, string $reasonPhrase = '');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the response reason phrase associated with the status code.
|
* Gets the response reason phrase associated with the status code.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue