0

さて、crud が正しく作成されたエンティティがあります...そして、エンティティの .yml ルーティング ファイルが得られます...

yml ファイルで、次のようなルートを指定しました。

manager_agentview:
    pattern: /manager/{id}/view
    defaults: { _controller: "EcsCrmBundle:Management:agentview" }

これは完全に機能します...ただし、このページの内容はリストです...

私の機能は次のようなものです:

public function agentviewAction($id, $start = null, $end = null) {
        $em = $this->getDoctrine()->getEntityManager();
        $request = $this->getRequest();
            $today = time();
            echo $end;
            if ($end == null) {
                if (date('l') == "Saturday") { $end = date("Y-m-d 23:59:59"); } else { $end = date("Y-m-d 23:59:59", strtotime('next saturday', $today)); }
            }
            if ($start == null) {
                if (date('l') == "Sunday") { $start = date('Y-m-d 00:00:00'); } else { $start = date('Y-m-d 00:00:00', strtotime('last sunday', $today)); }
            }
            $entities = $em->getRepository('EcsCrmBundle:TimeClock');
            $query = $entities->createQueryBuilder('t');
            $query = $query->select('t')
                  ->where('t.daydate BETWEEN :start AND :end')
                  ->andwhere("t.noteBy = :id")
                  ->orderBy("t.id", 'ASC')
                  ->setParameter('start', $start)
                  ->setParameter('end', $end)
                  ->setParameter('id', $id)
                  ->getQuery();
            $entities = $query->getArrayResult();
            $dateRangeForm = $this->createForm(new DateRangeType());

            $query = $em->getRepository('EcsAgentManagerBundle:User')->find($id);

            //return new Response('yep', 200);
            return $this->render('EcsCrmBundle:TimeClock:view.html.twig', array('entity' =>$entities, 'user' => $query, 'start' => $start, 'end' => $end, 'form' => $dateRangeForm -> createView(),));  
    }

dateRangeForm は、単純に 2 つの jquery 日付ピッカー ボックスを作成します。

しかし、{start}/{end}ルートに追加すると、適切なルートが見つからないことが常に通知されます.... URLを同じままにしておきたいので(最終的に-URLに日付が含まれていない状態で)--私は「site.dev/manager/12/view のようなものに移動するだけで、データを表示する機能を壊さずに同じ関数にデータをポストする方法を理解する必要があります。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、処理する単一のコントローラー関数を使用できるようにする必要があります

/manager/1/view/start_date/end_date

また、処理します

/マネージャー/1/ビュー

正しい?

これには 2 つの解決策があります。1 つ目は、ここで説明されているオプションのプレースホルダーを作成することです: http://symfony.com/doc/current/book/routing.html。基本的に、ルートを次のように更新できます。

manager_agentview:
pattern: /manager/{id}/view/{start}/{end}
defaults: { _controller: "EcsCrmBundle:Management:agentview", start: null, end: null}

ルートは引き続き /manager/1/view に一致し、開始と終了を NULL に設定します。

2 番目の解決策は、すべてが同じコントローラーを指す複数のルートを作成することです。1 つのバージョンには開始日と終了日があり、もう 1 つのバージョンには開始日と終了日がありません。あなたがこれをしたいと思う唯一の理由は、上記の解決策はその場合でも一致するため、開始を含むが終了を含まない URL にルートを一致させたくない場合です。

于 2012-04-10T11:56:11.597 に答える