gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:47:19 26 4
gpt4 key购买 nike

Symfony 注释模块中有什么东西可以让我将它们用于其他用途吗?

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

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

在这里有一个 HTML5 带注释的标题或某些属性是否有意义?如果能够在已经存在的路线名称和内容旁边定义这些数据,就像注释一样,那就太好了。

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

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

有一些 SPA 前端通过前端包集成,并且通过 AJAX 调用连接到后端包,这是一个直接的 RESTful API,并添加了一个非常有趣的开发 PHP API 类 I以直接执行其他 PHP 类 Controller “方法”的方式解释和处理(路由)AJAX。

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

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

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

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

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

编辑 我不太确定这就是我的想法,看起来它让我设置了 title 的值和 url为此在 PHP 函数的 return 语句中,我希望它在注释中设置(参见 return '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;
}
}

我想在此处将其设置为 WAY,因此调用此路由的 ajax 可以访问它..(在此代码中查找 @historyApiTitle 等。)
<?php

namespace Blah\Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller,
Symfony\Component\HttpFoundation\JsonResponse,
Sensio\Bundle\FrameworkExtraBundle\Configuration\Method,
Sensio\Bundle\FrameworkExtraBundle\Configuration\Route,
Sensio\Bundle\FrameworkExtraBundle\Configuration\Template,
Blah\Bundle\Entity\Test,
Doctrine\ORM\Query; //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));
}
}

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

最佳答案

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

基本规则如下:

  • 你的类(class)应该有 @Annotation -phpdoc 注释
    /**
    * @Annotation
    */
    class CustomAnnotation
    {
    public function __construct($options) {}
    }
  • 在您需要的类(class)中,只需以标准方式使用它;
    class Person
    {
    /**
    * @CustomAnnotation("option")
    */
    public function getName()
    {
    return 'some stuff';
    }
    }
  • 关于symfony - 我可以轻松实现自己的 Symfony2 注释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29089757/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com