Hi deweloperom stypendystkaaktualizowania angularjs zakres po walidacji formularza wyszukiwarki w Symfony2
musieli przepisać aplikację w Symfony2 z angularjs używamy Symfony2 w celu MVC i angularjs dla użytecznych funkcji.
Oto nasz problem, najpierw wyświetlane klientom w tabeli z następującego kodu z angularjs moim zdaniem Symfony2:
var app = angular.module('appName', []);
app.controller('clientsCtrl', function ($scope, $http){
$scope.loading = true;
$http.post('{{ url(generatedScope) }}').then(function(response){
$scope.clients = response.data;
$scope.order = function(predicate){
$scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse :false;
$scope.predicate = predicate;
}
},function(response){
// TODO: handle the error somehow
})
});
{{ url(generatedScope) }}
jest var Gałązka wysłane przez kontroler Symfony2 z następujących czynności:
/**
* @Route("/clients", name="index")
*/
public function indexAction(Request $request)
{
$form = $this->createForm(SearchClients::class, null);
$form->handleRequest($request);
if($form->isValid()){
//TODO: Get form params and update angularJS scope somehow
}
return $this->render('clients/list.html.twig', [
'generatedScope' => 'getClients',
'form' => $form->createView()
]);
}
getClients
to nazwa naszej trasy domyślnej podczas otwierania nasz pogląd clients/list.html.twig
(nie używamy Doctrine):
/**
* @Route("/clients/list/json", name="getClients")
*/
public function getClientsAction()
{
$clients = new Clients($this->get('database_connection'));
$response = new JsonResponse($clients->getClients());
return $response;
}
więc w zasadzie generatedScope
wysyłane przez naszego regulatora jest: 127.0.0.0:8000/clients/list/json
, która jest zbiorem json z naszych klientów, są następnie wyświetlane klientom w tabeli naszym zdaniem w ten sposób:
<tr ng-repeat="x in clients | filter : test | orderBy:predicate:reverse">
<td>#{{ x.cli_id }}</td>
<td>{{ x.cli_lastname }}</td>
<td>{{ x.cli_firstname }}</td>
</tr>
Mamy formularz wyszukiwania, ta sama strona co tabela wyświetlająca naszych klientów, zbieramy imię i nazwisko oraz wywołujemy akcję, aby uzyskać odpowiedź jsona w celu aktualizacji naszego zakresu kątowego, udało nam się uzyskać odpowiedź w ten sposób:
/**
* @Route("/tiers/list/json/search", name="searchClients")
*/
public function searchClientsAction(){
$request = new Request($_POST);
$request = $request->query->get('search_clients'); //form name
$clients = new clients($this->get('database_connection'));
$response = new JsonResponse($clients->searchClients($request));
return $response;
}
Próbowaliśmy wysłać widoku tej trasy po walidacji formularza w naszej indexAction
:
if($form->isValid()){
//TODO: Get form params and update angularJS scope somehow
return $this->render('clients/list.html.twig', [
'generatedScope' => 'searchClients',
'form' => $form->createView()
]);
}
Ale jak widać, to nie działa.
Jak zatem zaktualizować zakres kątowy JS po sprawdzeniu poprawności formularza Symfony2?
Jeśli ktoś napotkał ten problem ... z przyjemnością przeczytałby jego opinię!
poważaniem,
Dylan
w 'searchClientsAction' dlaczego tworzysz nowe wystąpienie' Request'? Po prostu wpisz podpowiedź akcji za pomocą 'Request $ request', która zostanie wypełniona przez symfony. Chyba, że nie rozumiem twojego kodu, czy to może być problem? – DevDonkey
Ze sformułowania nie jestem pewien, czy przesyłasz swój formularz. Jeśli publikujesz swój formularz synchronicznie, to "{url (generatedScope)}}" powinien kontenerem "searchClients" route, ale nie przekazujesz atrybutu danych konkretnie 'search_clients', gdzie 'searchClientsAction' musi zapytać. Z drugiej strony, jeśli publikujesz asynchronicznie, nawet jeśli żądanie posta zawiera wszystkie niezbędne dane księgowania formularzy, powinno zwrócić wygenerowany przez Twig html (ze strony indeksu, ale z inną zmienną generateScope) – kodvin
Jeśli możesz uzyskać, jeśli ($ form-> isValid()) można skopiować całą zawartość funkcji "searchClientsAction" (czego nie polecam) Po dodaniu angularów do backendu symfony przestaliśmy używać formularzy i zaczęliśmy używać backendu jako api restu, a następnie po naciśnięciu przycisku search wywołasz $ http z ' search_clients 'to' searchClientsAction 'route i przypisz $ scope.clients = response.data; – kodvin