alpixel / AlpixelSeoBundle

MIT License
0 stars 1 forks source link

MetaTagService weird work #8

Open firestorm23 opened 8 years ago

firestorm23 commented 8 years ago

Hi, I installed your bundle. Generation of Sonata SEO tags seems not working due to this code.

public function onControllerFound(FilterControllerEvent $event)
    {
        if (!is_array($controllerData = $event->getController())) {
            return;
        }

        $controllerData = $event->getController();

        if ($controllerData[0] === null) {
            return;
        }

        $method = new \ReflectionMethod($controllerData[0], $controllerData[1]);

        //First we check for an automatic optim
        $annotations = $this->annotationReader->getMethodAnnotations($method);

        if (!empty($annotations)) {
            foreach ($annotations as $annotation) {
                if ($annotation instanceof SEOAnnotation\MetaTag) {
                    $request = $controllerData[0]->getRequest();
                    $controller = $request->get('_controller');
                    $object = $request->get($annotation->value);

                    if (empty($object)) {
                        continue;
                    }

                    $class = new \ReflectionClass($object);

That's Alpixel\Bundle\SEOBundle\Service\MetaTagService on 30-58. The code i'm intetersted is 52-56 line

                    $object = $request->get($annotation->value);

                    if (empty($object)) {
                        continue;
                    } 

                    $class = new \ReflectionClass($object);

This code should get an instance of class to pass it to the repository finder. First I don't get what is

$annotation->value

In annotation this parameter does not have a name and your README does not say what it is So this parameter should be in request and this is the weirdest thing. In my articleAction in which use your bundle, request only contains slug as input parameter from the router. But your code says that Request should containt entity instance to get it's class and pass it to the repository finder. So I don't get why you use

$annotation->value

instead of just

$annotaion->providerClass

to find right SEO tags pattern. And further and I don't get what is the purpose of $annotation->value parameter.

firestorm23 commented 8 years ago

Just found that you can't use $annotaion->providerClass to generate title from pattern. But I still don't know how to get instance of entity inside Request before the event onControllerFound is called.

firestorm23 commented 8 years ago

I found that you can use @ParamConverter annotation in order to point out how request parameter should be converted to object. Is it the way how it should work ?