我可以轻松实现自己的Symfony2注释吗?

时间:2015-03-17 01:16:27

标签: symfony routing annotations html5-history popstate

Symfony注释模块中是否有任何内容允许我将它们用于其他用途?

我知道@Route@Method你需要扩展现有的库,所以我猜不到那么容易。

目前,我正在使用JS History API,并且很乐意将我的JS文件的popState数据放在注释中。因此,当路由生成URL时,它们已经可用。

这里有一个HTML5带注释的标题或某个属性是否有意义?能够在已经存在的路由名称和内容旁边定义注释的数据是很棒的。

有没有人之前使用过注释进行过调整?

我想澄清我的意图,因为我认为我遗漏了一些重要的细节(提到历史API)来理解我的用例。

有一些SPA前端通过前端捆绑集成,这通过AJAX调用连接到后端捆绑,这是一个直接的RESTful API,增加了一个非常有趣的开发PHP API类我以直接执行其他PHP类控制器方法的方式对AJAX进行了解释和处理(路由)。

我在这个Symfony 2应用程序(fosjsrouter)中使用了很多ajax来处理路由。因此,SPA点击事件不是触发路由和动作的URL,而是将AJAX触发到后端路由器,具有大的JSON有效负载,不限于PHP控制参数(类/方法/ var名称)和数据集。

好的,所以回到正轨;鉴于上述情况;在路由器的JS类对象端,我认为这是向它添加一些JS History API功能的最佳位置,(状态,后退按钮等)

如果调用history标志,则可以调用上述类,该标志可能负责分配初始状态数据。首先,这是因为在这个JS方法中存在的JSON数据对象已经包含了许多关键的路由数据,以及后端PHP中需要的那条路由的param信息,它来自注释。

所以我的想法是,如果我将历史状态标题和URL的可访问性添加到注释中,那么我将可以访问那些可用于定义初始状态的信息,如果已标记,则在{{1}内部在这个主要的JS路由方法中。

现在我们可以在db和实时客户端异步之间来回传递状态两种方式。您可以使用前端的观察者或任何内容,以及后端的作业/队列,以使其完全被动。 (也使用React :-))

编辑我不太确定我在想什么,看起来它让我设置了ajax.done()和{{1}的值这个在PHP函数的return语句中,我希望它在注释中设置(参见return title

所以我试试这个,但我在哪里设置这些标题?

url

我想在这里设置它,所以调用此路由的ajax可以访问它..(在此代码中查找'Matthias Noback';等等。)

    <?php

namespace Blah\CoreBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
 * @Annotation
 */
class HistoryAnnotationController
{

    //history state params are out properties here..
    /**
     * @var
     */
    private $url;

    /**
     * @var
     */
    private $title;


    /**
     *
     */
    public function __construct()
    {

    }

    /**
     * @return mixed
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * @return mixed
     */
    public function getUrl()
    {
        return $this->url;
    }
}

那么看看这两个代码示例,我如何连接两者之间的点以使其工作?

2 个答案:

答案 0 :(得分:7)

是的,您可以使用注释类,您可以按照以下教程Creating Custom annotations Classes

进行操作

基本规则如下:

  • 您的班级应该有@Annotation -phpdoc评论

    /**
     * @Annotation
     */
    class CustomAnnotation
    {
        public function __construct($options) {}
    }
    
  • 在您需要的课程中,只需以标准方式使用它;

    class Person
    {
        /**
         * @CustomAnnotation("option")
         */
        public function getName()
        {
            return 'some stuff';
        }
    }
    

答案 1 :(得分:0)

你应该查看AOPBundle,它允许你从你的个人注释中进行治疗。但我不认为在视图中尝试注释是个好主意。你需要用php解析javascript,听起来很糟糕。