我可以很容易地实现我自己的Symfony2注释吗



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

我知道对于@Route@Method,您需要扩展现有的库,所以我猜这并不容易。

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

Q这里有一个HTML5注释的标题或一些属性,这难道没有意义吗?如果能够在已经存在的路线名称和内容旁边定义这些数据(如注释所示),那就太好了。

Q以前有人调整过注释吗?

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

有几个SPA前端已经通过前端捆绑包集成,这通过AJAX调用连接到后端捆绑包,后端捆绑包是一个直接的RESTful API,并添加了一个非常有趣的开发PHP API类,我制作了该类,以直接执行其他PHP类控制器的方法的方式插入和处理(路由)AJAX。

我为这个Symfony 2应用程序(fosjsrouter)使用了大量ajax来处理路由。因此,SPA点击事件不是URL触发路由和操作,而是将AJAX发送到后端路由器,并带有大量JSON负载,不限于PHP控制参数(类/方法/变量名称)和数据集。

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

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

因此,如果我在注释中添加历史状态标题和URL的可访问性,那么我就可以访问那里的信息来定义初始状态,如果被标记,就在ajax.done()中,在这个主要的JS路由方法中。

现在,我们可以在数据库和实时客户端异步之间以两种方式来回传递状态。您可以在前端使用观察器或任何东西,并在后端使用作业/队列来保持其完全响应。(也使用React:-))

EDIT我不太确定这是我的想法,它看起来让我在PHP函数的返回语句中为此设置titleurl的值,我希望它在注释中设置(请参见返回'Matthias Noback';

所以我正在尝试,但我该把这些标题设置在哪里呢?

    <?php
namespace BlahCoreBundleController;
use SymfonyBundleFrameworkBundleControllerController;
/**
 * @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;
    }
}

我想把它设置回这里,这样调用该路由的ajax就可以访问它。(在这段代码中查找@historyApiTitle,等等。)

<?php
namespace BlahBundleController;
use SymfonyBundleFrameworkBundleControllerController,
    SymfonyComponentHttpFoundationJsonResponse,
    SensioBundleFrameworkExtraBundleConfigurationMethod,
    SensioBundleFrameworkExtraBundleConfigurationRoute,
    SensioBundleFrameworkExtraBundleConfigurationTemplate,
    BlahBundleEntityTest,
    DoctrineORMQuery; //for hydration
class StuffController
{
    /**
     * @Route("/some/route/name/{test}", name="some_route_name", options={"expose"=true})
     * @param $test
     * @return mixed
     * @historyApiTitle('This is the get something page')
     * @historyApiUrl('/get_something')
     */
    public function getSomethingAction($test)
    {
        $em = $this->getDoctrine()->getManager();
        $dql = "
            SELECT s
            FROM BlahBundle:Stuff s
            WHERE s.test = :test";
        $query = $em->createQuery($dql);
        $query->setParameter('test', $test);
        $paginator = $this->get('knp_paginator');
        $pagination = $paginator->paginate($query,
            $this->get('request')->query->get('page', 1), 1000);
        return $this->render('BlahBundle:Stuff:get_something.html.twig', array('pagination' => $pagination));
    }
}

Q那么,看看这两个代码示例,我如何将两者之间的点连接起来以使其发挥作用?

是的,您可以注释类,您可以按照以下教程创建自定义注释类

基本规则如下:

  • 您的类应该有@Annotation-phpdoc注释

    /**
     * @Annotation
     */
    class CustomAnnotation
    {
        public function __construct($options) {}
    }
    
  • 在Your Needed类中,只需以标准方式使用它;

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

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

相关内容

  • 没有找到相关文章

最新更新