cakephp - CakePHP 4.2 Annotate:不正确的应用程序命名空间
问题描述
我正在使用 CakePHP 4.2 版,并注意到与 API 捆绑在一起的注释脚本的一些奇怪行为。对于一个组件,注释脚本希望默认为 CakePHP 的默认 App\ 域。我已更改应用程序名称,因此大多数其他类默认为正确的应用程序名称。但不是这一脚本,到目前为止,仅适用于这一文件。
我在下面包含了组件的主体,以供审查。可以看到@method 注解使用了 App\ 域。当我使用 PHPStan 分析我的代码时,麻烦就来了。如果我保留注释,PHPStan 会告诉我:
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------
Line src/Controller/Component/CartManagerComponent.php
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------
43 Property Visualize\Controller\Component\CartManagerComponent::$Controller (Visualize\Controller\AppController) does not accept App\Controller\AppController.
44 Call to method loadModel() on an unknown class App\Controller\AppController.
Learn more at https://phpstan.org/user-guide/discovering-symbols
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------
该文件本身不会在任何地方使用 App\ 域。我不确定在哪里寻找脚本以找出问题所在。这是我的组件的主体,以防你看到我看不到的东西:
<?php
declare(strict_types=1);
namespace Visualize\Controller\Component;
use Authorization\Identity;
use Cake\Controller\Component;
use Cake\Log\Log;
/**
* CartManager component
*
* @method \App\Controller\AppController getController()
* @property \Visualize\Controller\AppController $Controller
* @property \Visualize\Model\Table\CartsTable $Carts
*/
class CartManagerComponent extends Component
{
/**
* Default configuration.
*
* @var array
*/
protected $_defaultConfig = [];
/**
* @var \Visualize\Controller\AppController
*/
protected $Controller;
/**
* @var \Visualize\Model\Table\CartsTable
*/
protected $Carts;
/**
* @param array $config The current configuration array
* @return void
*/
public function initialize(array $config): void
{
parent::initialize($config);
$this->Controller = $this->getController();
$this->Controller->loadModel('Carts');
}
/**
* Returns the most recent active cart.
*
* @param \Authorization\Identity $user The User entity.
* @return array|\Cake\Datasource\EntityInterface|null
* @noinspection PhpUnnecessaryFullyQualifiedNameInspection
*/
public function getUserCart(Identity $user)
{
$cart = $this->Controller->Carts->newEmptyEntity();
if (!empty($this->Controller->Carts) && is_a($this->Controller->Carts, '\Visualize\Model\Table\CartsTable')) {
$query = $this->Controller->Carts->find('userCart', ['user_id' => $user->getIdentifier()]);
if (!$query->isEmpty()) {
$cart = $query->first();
} else {
$cart->set('user_id', $user->getIdentifier());
$this->Controller->Carts->save($cart);
}
if (is_object($cart) && is_a($cart, '\Cake\Datasource\EntityInterface')) {
$session = $this->Controller->getRequest()->getSession();
$session->write('Cart.id', $cart->id);
}
}
return $cart;
}
/**
* Abandons carts
*
* @param int $user_id The associated user ID
* @param int $cart_id The current cart ID
* @return void
*/
public function pruneCarts(int $user_id, int $cart_id): void
{
if (!empty($this->Controller->Carts) && is_a($this->Controller->Carts, '\Visualize\Model\Table\CartsTable')) {
// Find all the carts we didn't just create:
$userCarts = $this->Controller->Carts->find('all', ['fields' => ['id', 'user_id', 'cart_status']])
->where([
'id !=' => $cart_id,
'user_id' => $user_id,
'cart_status' => 'active',
]);
if (!$userCarts->isEmpty()) {
$count = 0;
foreach ($userCarts as $cart) {
if ($count < 5) {
$record = $this->Controller->Carts->newEmptyEntity();
$record = $this->Controller->Carts->patchEntity($record, $cart->toArray());
$record->set('id', $cart->id);
$record->set('cart_status', ABANDONED_CART);
if (!$this->Controller->Carts->save($record)) {
Log::alert('Error abandoning cart');
}
} else {
$this->Controller->Carts->delete($cart);
}
$count++;
}
}
}
}
}
解决方案
推荐阅读
- java - 我不能在类片段中使用我的数组列表
- vector - 如何将整数向量连接成单个整数?
- java - 带有选择图标的对话框
- angular - 无法使用 multipart/formdata 更新实体 - NgRx 数据
- sql - 具有最旧行的 SQL 总和列
- android - 客户端处理程序无法识别我受信任的 API 证书
- xamarin.forms - 如何使用 Prism 在 TabbedPage 的第二个/第三个选项卡上触发 OnNavigatedTo?
- javascript - 在通知点击时打开已安装的 PWA
- floating-point - 将 IEEE 单精度转换为十进制
- c# - 如何使用 C# 自动化 SAP GUI 750