APCu适配器& Symfony 3.3 - >错误

时间:2017-06-03 14:52:26

标签: php symfony service controller adapter

我正在尝试将APCu插入Symfony 3.3测试项目。 我将ApcuAdapter添加到AppKernel.php时收到错误消息。 以下是我所做的清单:

    ./app/AppKernel.php中的
  1. 我在$bundles的{​​{1}}添加了一条“新”行:

    public function registerBundles()
  2. 打开项目的网站。它显示错误:

  3.   

    尝试调用类“Symfony \ Component \ Cache \ Adapter \ ApcuAdapter”的名为“getName”的未定义方法。

    public function registerBundles() { $bundles = [ ... , new Symfony\Component\Cache\Adapter\ApcuAdapter() ]; ... return $bundles; } 表示项目的根文件夹)

    请告诉我为什么会发生此错误以及如何将此适配器插入symfony框架。谢谢。

1 个答案:

答案 0 :(得分:0)

我在框架的网站上找到了解决方案。

不知何故,我们不应该使用Adapter,而应使用Simple。 对我来说似乎很不合逻辑。

所以,服务现在可以工作并且看起来像这样:

    <?php

    namespace AppBundle\Service;

    use Symfony\Component\Cache\Simple\ApcuCache;

    class ApcuTester
    {
        public function __construct
        (
        )
        {

        }

        public function testMe()
        {
            $cache = new ApcuCache();

            $TestVar_dv = 0;
            $TestVar_vn = 'TestVar';
            $TestVar = NULL;

            //$cache-> deleteItem($TestVar_vn); // dbg

            // Read
            if ( $cache->hasItem($TestVar_vn) )
            {
                $TestVar = $cache->get($TestVar_vn);
            }
            else
            {
                $cache->set($TestVar_vn, $TestVar_dv);
                $TestVar = $TestVar_dv;
            }

            // Modify
            $TestVar++;

            // Save
            $cache->set($TestVar_vn, $TestVar);

            // Return
            return $TestVar;
        }
    }

执行此服务的Controller看起来像这样:

    <?php

    namespace AppBundle\Controller;

    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Request;

    use AppBundle\Service\MessageGenerator;
    use AppBundle\Service\ApcuTester;

    class LuckyController extends Controller
    {
        /**
        * @Route("/lucky/number", name="lucky")
        */
        public function numberAction
        (
            Request $request, 
            MessageGenerator $messageGenerator,
            ApcuTester $apcuTester
        )
        {
            $lucky_number = mt_rand(0, 100);

            $message = $messageGenerator->getHappyMessage();

            $testvar = $apcuTester->testMe();

            $tpl = 'default/lucky_number.html.twig';
            $tpl_vars = 
            [
                'lucky_number' => $lucky_number,
                'message' => $message,
                'testvar' => $testvar
            ];

            return $this->render($tpl, $tpl_vars);
        }
    }

如果我在纯PHP中编写相同的东西,我会在一小时前完成它:)这些疯狂的框架......