Symfony の注釈モジュールに、それらを他の用途に使用できるものはありますか?
私は知って@Routeおり、@Method既存のライブラリを拡張する必要があるため、推測するほど簡単ではありません。
現在、私は JS History API を使用しておりpopState、JS ファイルのデータを注釈に入れたいと思っています。そのため、ルーティングが URL を生成するときに、それらはすでに使用可能です。
Qここに HTML5 の注釈付きのタイトルや何らかの属性を付けるのは理にかなっていませんか? このデータを注釈付きで、既存のルート名などのすぐ隣に定義できると便利です。
Q以前にアノテーションを微調整したことのある人はいますか?
ユースケースを理解するためにいくつかの重要な詳細 (History API の言及) を省略したと思うので、ここで私の意図を明確にしたかったのです。
フロントエンド バンドルを介して統合された SPA フロント エンドがいくつかあります。これは、AJAX 呼び出しを介して、ストレートな RESTful API であるバックエンド バンドルに接続され、開発が非常に楽しい PHP API クラス I が追加されています。他の PHP クラス コントローラ メソッドを直接実行する方法で AJAX を解釈および処理 (ルーティング) します。
この Symfony 2 アプリ (fosjsrouter) では、ルーティングを処理するために多くの ajax を使用しています。そのため、ルートとアクションをトリガーする URL の代わりに、SPA クリック イベントが AJAX をバックエンド ルーターに送信し、PHP 制御パラメーター (クラス/メソッド/変数名) とデータ セットに限定されない大きな JSON ペイロードを使用します。
では、軌道に戻ります。上記のシナリオを考えると、ルーターの JS クラス オブジェクト エンドでは、この内部に JS History API 機能 (状態、戻るボタンなど) を追加するのに最適な場所だと思いました。
上記のクラスは、historyフラグが呼び出された場合に呼び出すことができ、初期状態データの割り当てを担当する可能性があります。これは主に、この JS メソッドで使用されている JSON データ オブジェクトに、重要なルート データと、アノテーションに由来するバックエンド PHP で必要とされるそのルートのパラメータ情報がすでに多く含まれているためです。
ajax.done()したがって、履歴状態のタイトルと URL へのアクセシビリティを注釈に追加すると、初期状態を定義するために利用できるその情報にすぐにアクセスできるようになります。.
これで、db とリアルタイムのクライアント側非同期の間で 2 つの方法で状態をやり取りできるようになりました。フロントエンドからオブザーバーなどを使用し、バックエンドでジョブ/キューを使用して、完全に反応し続けることができます。(Reactも使用してください:-))
EDIT私はそれが私が考えていたことだとは確信していません.PHP関数のreturnステートメント内での値titleを設定するように見えます.url'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));
}
}
Qこれらの 2 つのコード例を見て、2 つの間のドットを接続してこれを機能させるにはどうすればよいですか?