0

JavaScript 用の jeditable プラグインを使用しており、Symfony2 プロジェクトに実装したいと考えています。プラグインで名前を編集し、その名前をデータベースで編集したいのですが、ページを更新したときに変更が消えるのではなく、私の場合は消えてしまいました。:(

コントローラーがそのようであってはならず、問題はそこにあるとほぼ確信していますが、正確にどのように記述するのですか? ここにあります:

public function editCategoryAction(Request $request, $id)
{   
    $category = $this->repository->find($id);      
    $form = $this->createForm(new CategoryType(), $category);

    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            $this->em->persist($category);
            $this->em->flush();

            return $this->redirect($this->generateUrl('categories'));
        }
    }

    return $this->render(
        'AcmeBudgetTrackerBundle:Categories:categories.html.twig', array( 
            'form' => $form->createView()));      
}

これは私のテンプレートです:

    <a href="{{ path('edit_category', { 'id': cat.id}) }}">
        <strong class="edit">
            {{ cat.name }}
        </strong>
    </a> 

<script>
    var token = "{{form._token.vars.value}}";
    var path = "{{ path('edit_category', { 'id': cat.id}) }}";
</script>

そして、これは.jsファイルにあります:

(function(){
     $('.edit').editable(function (value, settings) {
            var data = {};
            data[this.id] = value;
            data["_token"] = token;
            console.log(path);
            console.log(data);
            $.post(path, data);
                return(value);
            }, {
                indicator:'Saving...'
            });
}) ();

コンソールの出力は問題ないようです。

/BudgetTracker/web/app_dev.php/edit_category/52
Object {: "Edu", _token: "9d29860b59ccafbc265ea12346c91fa7e378cc97"} 

しかし問題は、データベースに何も投稿されず、更新を押すと行った変更が消えてしまうことです。

これを解決するのを手伝ってもらえますか? 前もって感謝します!:)

4

1 に答える 1

1

ここではフォーム コンポーネントを使用する必要はないと思います。文字列を処理するだけです。ということで、やり方を解説します。

JavaScript:

$('.edit').editable(path);

コントローラ:

public function editCategoryAction(Category $category)
{   
    //check if exists/valid

    //get the text sent from jeditable
    $name = $this->request->get('value');
    $category->setName($name);

    $em = $this->getDoctrine()->getManager();
    $em->persist($category);
    $em->flush();
    //return the name value to jeditable so it can display it
    return new Response($name);     
}

小枝:

<strong class="edit">{{ cat.name }}</strong>

<script>
    var path = "{{ path('edit_category', { 'id': cat.id}) }}";
</script>

jEditable は「値」という名前の編集済みテキストを送信するため、コントローラで取得できます。コントローラーでは、paramconverter を暗黙的に使用して、URL の ID からカテゴリを取得します。これで問題ないはずです。

パスにアクセスするために twig と javascript を混在させたくない場合は、FORJsRoutingBundle を使用できることに注意してください。

于 2013-05-31T10:53:37.563 に答える