Best Practise including code-completion in ZF2

2019-08-30 05:50发布

问题:

In the following code the "/** @var BusinessLogic\User $user */" is not enabling code completion. When going by mouse over User in the comment I got:

"Multiple Declarations: this version of IDE will have problems with completion member resolution and inheritance anallysis for all classes that have multiple definitions in project files (regardles of includes)"

 public function indexAction() {
   /**  @var BusinessLogic\User $user */
   $user = $this->getServiceLocator()->get('userBusinessLogic');
   $user->setUsername('testUsername');
 }

I think Jetbrains is already working on it: http://youtrack.jetbrains.com/issue/WI-2760 and all related Tasks.

The only way I found to enable this is:

 use BusinessLogic\User; 

 public function indexAction() {
   /**  @var User $user */
   $user = $this->getServiceLocator()->get('userBusinessLogic');
   $user->setUsername('testUsername');
 }

But when I put:

use BusinessLogic\User;

into the code I can instantiate the user by

$user = new User();

without serviceLocator; not good for other developers to work on this file afterwards.

Some ideas? Code-Completion is quite important.

回答1:

Try adding leading slash before namespace.

Your first attempt tells IDE to reference class relative to current namespace (i.e. if current namespace is \Website\Shop then FQN will be \Website\Shop\BusinessLogic\User).

With leading slash you will make it FQN. So ... /** @var \BusinessLogic\User $user */