Ich hatte selbst viele Probleme damit, Symfony und AngularJS zusammenarbeiten zu lassen. Während ich daran arbeitete, habe ich jedoch einige Dinge gelernt, die Ihnen helfen können:
- Um die AngularJS-Ausdrücke
{{ variable }}
von geschweiften Klammern zu trennen , haben Sie drei Alternativen:
ein). Verwenden Sie die Anführungszeichen um die AngularJS-Ausdrücke{{ '{{ variable }}' }}
b). Umgeben Sie Ihren AngularJS-Code mit{% verbatim %} your code {% endverbatim %}
c). Verwenden Sie den AngularJS- interpolateProvider
Dienst
angular.module('myApp', []).config(function($interpolateProvider){
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
});
- In der js-Datei kann twig die URL nicht für Sie generieren. Hierfür können Sie "friendsofsymfony / jsrouting-bundle" verwenden. Nach der Installation können Sie es verwenden als:
$http.get(Routing.generate('route_name', {'id':id}));
Dies funktioniert möglicherweise nicht für Sie zur Einreichung, warum? Eine Sache, die Sie über $ http.post wissen sollten, ist, dass die Daten nicht als "Formulardaten", sondern als "Request Payload" gesendet werden. Dies ist die normale Methode, um Daten über HTTP POST zu übertragen. Das Problem ist, dass dieser „normale Weg“ nicht einer Formularübermittlung entspricht, was zu Problemen bei der Interpretation von Daten mit dem Symfony Request-Objekt führt.
Verwenden Sie stattdessen Folgendes:
$http.put(url, $.param({foo: 'bar'}), {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
Wenn Sie wissen möchten, ob eine Anforderung eine AJAX-Anforderung innerhalb des Controllers ist, verwenden wir normalerweise die Methode isXMLHttpRequest (). Das Problem ist, dass Angular seine Anforderungen nicht als XMLHttpRequest-Anforderungen identifiziert. Benutze das:
var app = angular.module('myModule', []);
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);
Während Sie Formulare erstellen, können Sie das Formular über AngularJS anzeigen und Symfony Form die Anforderung bearbeiten lassen. Dazu müssen Sie den CSRF-Schutz deaktivieren:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => '...',
'csrf_protection' => false
));
}
Jetzt kann Ihr Symfony-Formular Daten von einer benutzerdefinierten Angular-Anforderung empfangen.
Abgesehen von all den Dingen bin ich mir immer noch nicht sicher, ob ich Ihr Formular mit Symfony oder AngularJS anzeigen soll .
Hoffe das hilft.