我正在尝试将APCu插入Symfony 3.3测试项目。
我将ApcuAdapter
添加到AppKernel.php
时收到错误消息。
以下是我所做的清单:
./app/AppKernel.php
中的我在$bundles
的{{1}}添加了一条“新”行:
public function registerBundles()
打开项目的网站。它显示错误:
尝试调用类“Symfony \ Component \ Cache \ Adapter \ ApcuAdapter”的名为“getName”的未定义方法。
(public function registerBundles()
{
$bundles = [
... ,
new Symfony\Component\Cache\Adapter\ApcuAdapter()
];
...
return $bundles;
}
表示项目的根文件夹)
请告诉我为什么会发生此错误以及如何将此适配器插入symfony框架。谢谢。
答案 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中编写相同的东西,我会在一小时前完成它:)这些疯狂的框架......