dtp0760 2017-04-23 08:10
浏览 148

如何使用Slim框架3进行flash消息

I have the problem to use Slim/Flash/Messages, to do a flash message. I have this error

Fatal error:
Uncaught DI\NotFoundException: No entry or class found for 'Slim\Flash' in C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Container.php:119

Stack trace:
#0 C:\laragon\www\cart\app\container.php(52): DI\Container->get('Slim\\Flash')
#1 [internal function]: DI\Definition\Source\DefinitionFile->{closure}(Object(DI\Container)) #2 C:\laragon\www\cart\vendor\php-di\invoker\src\Invoker.php(82): call_user_func_array(Object(Closure), Array) 
#3 C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Definition\Resolver\FactoryResolver.php(81): Invoker\Invoker->call(Object(Closure), Array)
#4 C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Definition\Resolver\ResolverDispatcher.php(58): DI\Definition\Resolver\FactoryResolver->resolve(Object(DI\Definition\FactoryDefinition), Array) 
#5 C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Container.php(285): DI\Definition\Resolver\ResolverDispatcher->resolve(Object(DI\Definition\FactoryDefinition), Array)
#6 C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Container.php(122): DI\Contai in C:\laragon\www\cart\vendor\php-di\php-di\src\DI\Container.php on line 119

In the bootstrap/app.php

$container->set('flash', function($container) { return new \Slim\Flash\Messages($container); });

in the container.php

Twig::class => function (ContainerInterface $c) {
    $twig = Factory::getEngine();

    $twig->addExtension(new TwigExtension(
            $c->get('router'),
            $c->get('request')->getUri()
    ));

    $twig->getEnvironment()->addGlobal('basket', $c->get(Basket::class));
    $twig->getEnvironment()->addGlobal('auth', $c->get(Auth::class));
    $twig->getEnvironment()->addGlobal('user', $c->get(Customer::class));

    $twig->getEnvironment()->addGlobal('flash', $c->get(Flash::class));         

    return $twig;   
},
  • 写回答

1条回答 默认 最新

  • dongli8466 2017-05-04 06:44
    关注

    $twig->getEnvironment()->addGlobal('flash', $c->get(Flash::class)); means that you're looking for a key called Slim\Flash within the container, but you registered it with the key flash.

    Therefore change:

    $twig->getEnvironment()->addGlobal('flash', $c->get(Flash::class));
    

    to

    $twig->getEnvironment()->addGlobal('flash', $c->get('flash'));
    

    Alternatively, you can use the fully qualified class name everywhere:

    app.php:

    use Slim\Flash\Messages as Flash;
    
    $container->set(Flash::class, function($container) {
        return new Flash($container);
    });
    

    and add this to the top of container.php:

    use Slim\Flash\Messages as Flash;
    
    评论

报告相同问题?

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计