2016-07-30 3 views
2

Я пытаюсь выяснить, как включить/отключить пользователя с флажком без перезагрузки страницы.Symfony: передать параметр Ajax url

index.html.twig

<table> 
    <thead> 
    <tr> 
     <th>UserName</th> 
     <th>Enabled</th> 
    </tr> 
    </thead> 
    <tbody> 
    {% for user in users %} 
    <td><a href="{{ path('user_show', {'id': user.id}) }}"> 
      {{ user.username }}</a> 
    </td> 
    <td><input id="user_enable_{{ user.id }}" onclick="enabledChange({{ user.id }})" 
    type="checkbox" {% if user.enabled %}checked{% endif %}/> 
    </td> 
    {% endfor %} 
    </tbody> 
</table> 

<script> 
var changePath = {{ path('user_enable_change', {'id': user.id}) }}; 

function enabledChange(id) 
{ 
    var value = $(this).val(); 
    console.log('value: ' + value); 
    $.ajax({ 
     type: "POST", 
     url: changePath, 
     async: true, 
     data: { }, 
     success: function() { 
      console.log('success'); 
     } 
    }); 
} 
</script> 

UserController

/** 
* @Route("/enable/{id}", name="user_enable_change") 
*/ 
public function userDisableAction(User $user) { 

    if($user->isEnabled()){ 
     $user->setEnabled(false); 
    }else { 
     $user->setEnabled(true); 
    } 

    try { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($user); 
     $em->flush(); 
    } 
    catch(\Exception $e) { 
     return new JsonResponse('error'); 
    } 

    return new JsonResponse('success'); 

} 

Вопрос

Как я могу установить соответствующий идентификатор пользователя к функции enabledChange и изменения проверяется состояние в зависимости на странице пользователя ел?

+0

С какими проблемами сталкивается текущий код? –

+0

@alokpatel У меня ошибка: «Variable» пользователь «не существует в @ Admin/UserPanel/index.html.twig», потому что я устанавливаю параметр user.id для измененияPath вне {% для пользователя в пользователях%} – blahblah

+0

Вы " чтобы определить это внутри 'var changePath' и использовать переданный параметр. –

ответ

2

Вы должны добавить кавычки в своих переменных, и передать changePath в качестве аргумента:

onclick="enabledChange('{{ user.id }}', '{{ path('user_enable_change', {'id': user.id}) }}')" 

затем:

function enabledChange(id, changePath) { 
    var value = $(this).val(); 
    console.log('value: ' + value); 
    $.ajax({ 
     type: "POST", 
     url: changePath, 
     async: true, 
     data: { }, 
     success: function() { 
      console.log('success'); 
     } 
    }); 
} 

Я надеюсь, что это поможет.

Смежные вопросы