1

By switching my app from Sf5 to Sf6, I have annotation to attribute issues :

[Semantical Error] The annotation "@Security" in method App\Controller\MyController::delete() was never imported. Did you maybe forget to add a "use" statement for this annotation? in {"path":"..\/..\/src\/Controller\/","namespace":"App\\Controller"} (which is being imported from "/var/www/config/routes/attributes.yaml"). Make sure there is a loader supporting the "attribute" type.
bcag2
  • 1,988
  • 1
  • 17
  • 31

1 Answers1

1

A first step was to move config/routes.yaml if you have it to config/routes/attributes.yaml and update the controller path (adding ../) as mentionned at https://symfony.com/doc/current/routing.html#creating-routes-as-attributes

Second step was to convert security annotations to attributes. I used rector to convert routes annotations to attributes but I didn't find rule to security, so to do something like :

// annotation :
    /**
     * @Security("is_granted('ROLE_ADMIN')")
     */
// --> attribute :
    #[IsGranted('ROLE_ADMIN')]

I used vim (neovim) rexeg

%s/\(\s*\)\/\*\*\n\s*\* @Security("is_granted\(('ROLE_.*')\)")\n\s*\*\//\1#[IsGranted\2]/cg

and I removed use on FrameworkExtraBundle :

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

and removed deprecated FrameworkExtraBundle :
composer remove sensio/framework-extra-bundle

and the error was gone

bcag2
  • 1,988
  • 1
  • 17
  • 31