== index.php
declare(strict_types=1);
(require __DIR__ . '/app/config/bootstrap.php')->run();
== bootstrap.php
declare(strict_types=1);
use DI\ContainerBuilder;
use Slim\App;
require_once __DIR__ . '/../../../vendor/autoload.php';
$containerBuilder = new ContainerBuilder();
$containerBuilder->addDefinitions(__DIR__ . '/container.php');
$container = $containerBuilder->build();
$app = $container->get(App::class);
(require __DIR__ . '/routes.php')($app);
(require __DIR__ . '/middleware.php')($app);
return $app;
== container.php
declare(strict_types=1);
use Psr\Container\ContainerInterface;
use Selective\Config\Configuration;
use Slim\App;
use Slim\Factory\AppFactory;
return [
Configuration::class => function () {
return new Configuration(require __DIR__ . '/settings.php');
},
App::class => function (ContainerInterface $container) {
AppFactory::setContainer($container);
$app = AppFactory::create();
//$app->setBasePath('/app');
return $app;
},
PDO::class => function (ContainerInterface $container) {
$config = $container->get(Configuration::class);
...
return new PDO($dsn, $username, $password, $flags);
},
];
== settings.php
$settings = [];
$settings['root'] = dirname(__DIR__);
$settings['temp'] = $settings['root'] . '/tmp';
$settings['public'] = $settings['root'] . '/public';
$settings['error_handler_middleware'] = [
'display_error_details' => true,
'log_errors' => true,
'log_error_details' => true,
];
$settings['db'] = [
'driver' => 'mysql',
'host' => 'localhost',
...
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'flags' => [
...
],
];
return $settings;
== routes.php
declare(strict_types=1);
use Slim\Http\Response;
use Slim\Http\ServerRequest;
use Slim\App;
//require \App\Action\HomeAction;
//require __DIR__ . '/../action/HomeAction.php';
//require __DIR__ . '/../action/AccountReadAction.php';
return function (App $app) {
$app->get('/', \App\Action\HomeAction::class);
$app->get( '/api/v1/accounts', \App\Action\AccountReadAllAction::class);
$app->post( '/api/v1/account/new', \App\Action\AccountCreateAction::class);
$app->get( '/api/v1/account/{id}', \App\Action\AccountReadAction::class);
$app->patch( '/api/v1/account/{id}', \App\Action\AccountUpdateAction::class);
$app->delete( '/api/v1/account/{id}', \App\Action\AccountDeleteAction::class);
};
== Error Message
Slim Application Error
The application could not run because of the following error:
Details
Type: RuntimeException
Code: 0
Message: Callable App\Action\AccountReadAction does not exist
File: /home/PROJECTNAME/vendor/slim/slim/Slim/CallableResolver.php
Line: 137
Trace
#0 /home/PROJECTNAME/vendor/slim/slim/Slim/CallableResolver.php(91): Slim\CallableResolver->resolveSlimNotation('App\\Action\\Acco...')
#1 /home/PROJECTNAME/vendor/slim/slim/Slim/CallableResolver.php(61): Slim\CallableResolver->resolveByPredicate('App\\Action\\Acco...', Array, 'handle')
#2 /home/PROJECTNAME/vendor/slim/slim/Slim/Routing/Route.php(358): Slim\CallableResolver->resolveRoute('App\\Action\\Acco...')
#3 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(73): Slim\Routing\Route->handle(Object(Slim\Http\ServerRequest))
#4 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(73): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#5 /home/PROJECTNAME/vendor/slim/slim/Slim/Routing/Route.php(333): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#6 /home/PROJECTNAME/vendor/slim/slim/Slim/Routing/RouteRunner.php(80): Slim\Routing\Route->run(Object(Slim\Http\ServerRequest))
#7 /home/PROJECTNAME/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php(50): Slim\Routing\RouteRunner->handle(Object(Slim\Http\ServerRequest))
#8 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(132): Slim\Middleware\BodyParsingMiddleware->process(Object(Slim\Http\ServerRequest), Object(Slim\Routing\RouteRunner))
#9 /home/PROJECTNAME/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php(58): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#10 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(132): Slim\Middleware\RoutingMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#11 /home/PROJECTNAME/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php(89): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#12 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(132): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#13 /home/PROJECTNAME/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php(89): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#14 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(132): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Http\ServerRequest), Object(class@anonymous))
#15 /home/PROJECTNAME/vendor/slim/slim/Slim/MiddlewareDispatcher.php(73): class@anonymous->handle(Object(Slim\Http\ServerRequest))
#16 /home/PROJECTNAME/vendor/slim/slim/Slim/App.php(208): Slim\MiddlewareDispatcher->handle(Object(Slim\Http\ServerRequest))
#17 /home/PROJECTNAME/vendor/slim/slim/Slim/App.php(192): Slim\App->handle(Object(Slim\Http\ServerRequest))
#18 /home/PROJECTNAME/public_html/index.php(5): Slim\App->run()
#19 {main}
\App
classes? Otherwise if it follows PSR-4 convention (which it should) you can add it to your composer.json
like so: https://getcomposer.org/doc/04-schema.md#psr-4
{
"require": {
"php": ">=7.1",
"ext-json": "*",
"monolog/monolog": "^2.0",
"php-di/php-di": "^6.0",
"selective/config": "^0.1.1",
"slim/http": "^0.8.0",
"slim/psr7": "^0.6.0",
"slim/slim": "4.*"
},
"require-dev": {
"phpunit/phpunit": "8"
},
"autoload": {
"psr-4": {
"App\\": "public/app/"
}
}
}
App\Action
, then your directory should be named like this: src/Action/
and not src/action/
.
Hi. I have this problem, when I upload my project to a host this error activates me: Fatal error: Not captured DI \ NotFoundException: No entry or class was found for 'App \ Controllers \ AuthController' in /home/vrfctuqw/myhonsting.com/ vendor /php-di/php-di/src/Container.php:135 Stack tracking: # 0 /home/vrfctuqw/myhosting.com/vendor/php-di/php-di/src/CompiledContainer.php(64) : DI \ Container-> get ('App \ Controllers ...') # 1 /home/vrfctuqw/myhosting.com/public/index.php(474): DI \ CompiledContainer-> get ('App \ \ Controllers ... ') # 2 {main} included in /home/vrfctuqw/myhosting.com/vendor/php-di/php-di/src/Container.php on line 135
Locally it works correctly, but in hosting I present this. I would like you to help me please
composer update
I get a notice that the package jeremeamia/superclosure is abandoned and php-di seems to require/depend on this package. Any solutions to this problem especially that the recommendation is using opis/closure and it's not advisable to edit composer.lock directly??
use ($var)
in a closure, but took those out
Hey all! I'm wondering if I can look up a key within a get()
'd array in a autowire()->constructorParameter()
somehow. This was my first stab, and I understand it doesn't work because get()
is a definition helper, not an immediate lookup:
return [
'config' => [
'foo' => 'bar'
],
'my.object' => autowire( MyClass::class )
->constructorParameter( 'foo', get( 'config' )[ 'foo' ] )
]
I understand that I could do this with a factory function, but I'm really curious as to if there is a way to do so without one?
I tried something like this:
class CacheServiceProvider implements ServiceProviderInterface
{
/**
* @param Container $pimple
*/
public function register(Container $pimple): void
{
$pimple[CacheAdapter::class] = [self::class, 'getCache'];
}