#php #symfony
#php #symfony
Вопрос:
В Symfony3.4 при поддержке автоматического подключения возникла следующая ошибка.
Я получил следующую ошибку. Я только что переписал container->get ('doctrine')
.
Я думаю, что вы можете подключиться к БД, потому что это ошибка, возникшая после входа в систему.
Есть ли что-нибудь, что вы можете придумать?
https://symfony.com/doc/3.4/service_container/3.3-di-changes.html
Ошибка
Type error: Argument 1 passed to
AppAhiSpCommonBundleModelServiceAmcService::getShopMemberCount()
must be of the type string, null given, called in
/home/vagrant/Symfony2/src/Ahi/Sp/AdminBundle/Model/Service/AnalyticsService.php on line 885
at src/Ahi/Sp/CommonBundle/Model/Service/AmcService.php:195
at AppAhiSpCommonBundleModelServiceAmcService->getShopMemberCount(null)
(src/Ahi/Sp/AdminBundle/Model/Service/AnalyticsService.php:885)
at AppAhiSpAdminBundleModelServiceAnalyticsService->getAmcMemberCountPerMonth(object(DateTime), null)
(src/Ahi/Sp/AdminBundle/Model/Service/AnalyticsService.php:811)
at AppAhiSpAdminBundleModelServiceAnalyticsService->getAmcMemberSummary()
(src/Ahi/Sp/AdminBundle/Controller/Hq/DefaultController.php:68)
at AppAhiSpAdminBundleControllerHqDefaultController->indexAction(object(EcStaffDataService), object(EcArticleDataService), object(ArticleService), object(AnalyticsService), object(PostService), object(KeepRequestService))
(vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:151)
at SymfonyComponentHttpKernelHttpKernel->handleRaw(object(Request), 1)
(vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68)
at SymfonyComponentHttpKernelHttpKernel->handle(object(Request), 1, true)
(vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:200)
at SymfonyComponentHttpKernelKernel->handle(object(Request))
(web/app_dev.php:37)
AmcService.php
protected $entityManager;
/**
* @param ContainerInterface $container
* @param EntityManagerInterface $entityManager
*/
public function __construct(ContainerInterface $container, EntityManagerInterface $entityManager)
{
$this->container = $container;
$this->entityManager = $entityManager;
parent::__construct($container, $entityManager);
}
/**
* Obtain the number of registered members of the store specified by ID and year / month.
*
* @param string $ahiStoreId Store ID
* If the AHI store ID is not specified, all stores other than EC members will be covered.
* @param string $yyyymm Year month Example)"201301"
*
* @param string $yyyymmTo Year month Example)"201301"
*
* @return int Returns the number of registered members of the store for the specified date.
*/
//line 195
public function getShopMemberCount(string $ahiStoreId, $yyyymm=null, $yyyymmTo=null)
{
$monthCondition = "";
if ($yyyymm amp;amp; $yyyymmTo) {
$from = substr($yyyymm, 0, 4) . '-' . substr($yyyymm, 4, 2) . '-01';
$to = substr($yyyymmTo, 0, 4) . '-' . substr($yyyymmTo, 4, 2) . '-01';
$monthCondition = " AND m.member_entry_date >= '{$from}'"
. " AND m.member_entry_date < ADDDATE('{$to}', INTERVAL 1 MONTH)";
}elseif($yyyymm){
$date = substr($yyyymm, 0, 4) . '-' . substr($yyyymm, 4, 2) . '-01';
$monthCondition = " AND m.member_entry_date >= '{$date}'"
. " AND m.member_entry_date < ADDDATE('{$date}', INTERVAL 1 MONTH)";
}
if (empty($ahiStoreId)) {
$sql = "SELECT"
. " count(m.member_id) AS member_cnt"
. " FROM"
. " member m"
. " WHERE"
. " m.store_id != '99999999'" // Non-EC registered members
. " AND m.member_deleted_flg = 0" // I have not withdrawn
. " AND m.member_del = 0" // Not deleted
. $monthCondition
;
} else {
$sql = "SELECT"
. " count(m.member_id) AS member_cnt"
. " FROM"
. " hq_store_table s"
. " INNER JOIN member m ON"
. " s.store_id = m.store_id"
. " AND m.member_deleted_flg = 0" // I have not withdrawn
. " AND m.member_del = 0" // Not deleted
. $monthCondition
. " WHERE"
. " ahi_store_id = '" . $ahiStoreId . "'"
;
}
$stmt = $this->entityManager->getConnection()->executeQuery($sql);
while ($row = $stmt->fetch()) {
return $row['member_cnt'];
}
return 0;
}
услуги.yml
AppAhiSpCommonBundleModelServiceAmcService:
arguments:
$entityManager: '@doctrine.orm.ec_entity_manager'
AnalyticsService.php
public function getAmcMemberSummary($ahiStoreId=null): array
{
$summary = array();
// Latest number
$summary['latest'] = $this->getAmcMemberCountPerMonth(new DateTime('today'),$ahiStoreId);
}
private function getAmcMemberCountPerMonth(DateTime $date, $ahiStoreId=null)
{
$months = array();
for ($i = 0; $i < 6; $i ) {
$month = clone($date);
$month->modify("first day of -{$i} month");
$months[] = $month;
}
$summary = array(
//line 885
'total' => $this->amcService->getShopMemberCount($ahiStoreId),
'months' => array(),
);
foreach ($months as $month) {
$summary['months'][] = array(
'date' => $month,
'count' => $this->amcService->getShopMemberCount($ahiStoreId, $month->format('Ym')),
);
}
return $summary;
}
Entitiy/Shop.php
public function setAhiStoreId(string $ahiStoreId): Shop
{
$this->ahiStoreId = $ahiStoreId;
return $this;
}
/**
* Get ahiStoreId
*
* @return string
*/
public function getAhiStoreId(): string
{
return $this->ahiStoreId;
}
ShopRepository.php
private function addSearchParams($queryBuilder, array $params)
{
if (isset($params["ahiStoreId"])) {
$queryBuilder->andWhere("s.ahiStoreId = :ahiStoreId");
$queryBuilder->setParameter("ahiStoreId", $params["ahiStoreId"]);
}
}
validation.yml
AhiSpCommonBundleModelEntityShop:
ahiStoreId:
- Regex:
pattern: "/^[0-9]{5}$/"
DefaultController.php
public function indexAction(ArticleService $articleService, AnalyticsService $analyticsService): array
{
//line 68
$amcMemberSummary = $analyticsService->getAmcMemberSummary();
}
Комментарии:
1. Где
getAmcMemberCountPerMonth
вызывается во время этого выполнения?2. Ошибка очевидна, вы пытаетесь передать значение null вместо значения not null string
3. @El_Vanja Спасибо за ваш комментарий. Пожалуйста, проверьте обновленную службу аналитики.
4.
$ahiStoreId
кажется, остается нулевым. Проследите всю трассировку стека, где этот параметр был передан изначально?5. @El_Vanja я вижу. Это из-за
$ahiStoreId
. Добавлен код, связанный с трассировкой стека и$ahiStoreId
. Части сущности и репозитория не изменились с момента перехода на автоматическую проводку. Есть ли что-нибудь, что мне нужно изменить?