Я пытаюсь подключить APCu к тестовому проекту Symfony 3.3.
Я получаю ошибку, когда добавляю ApcuAdapter
в AppKernel.php
,
Вот список того, что я сделал:
в ./app/AppKernel.php
я добавил «новую» строку в $bundles
в public function registerBundles()
:
public function registerBundles()
{
$bundles = [
... ,
new Symfony\Component\Cache\Adapter\ApcuAdapter()
];
...
return $bundles;
}
Открыт сайт проекта. Это показывает ошибку:
Попытка вызвать неопределенный метод с именем «getName» класса «Symfony \ Component \ Cache \ Adapter \ ApcuAdapter».
(./
означает корневую папку проекта)
Пожалуйста, скажите мне, почему происходит эта ошибка и как подключить этот адаптер к платформе Symfony. Спасибо.
Я нашел решение где-то на сайте фреймворка.
так или иначе, мы должны использовать не 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;
}
}
И Контроллер, который выполняет этот Сервис, выглядит так:
<?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, я бы сделал это на час раньше 🙂 Ох уж эти сумасшедшие фреймворки …
Других решений пока нет …