Я бы хотел использовать один и тот же вид для редактирования и просмотра. К сожалению, я не могу изменить свое мнение. В symfony3 я считаю, что нет возможности индексировать форму. Я пробовал все, что мог, но я не знаю, как я могу использовать ту же форму. В моем проекте я также использую JEE (напрямую связанный с базой данных) для связи с symfony с использованием UniRest API. Вот мои контроллеры просмотра и редактирования:
/** * @Method({"GET"}) */ public function viewAction($id) { $phone = new Phone(); $form = $this->createForm(PhoneType::class, $phone); $headers = array('Accept' => 'application/json'); $response = Unirest\Request::get(link/phones/'.$id,$headers); //$this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); return $this->render('AppBundle:Phone:PhoneView.html.twig', array ( 'form' => $form->createView(), 'phone' => $response->body, ) ); } /** * @Method({"PUT"}) */ public function updateAction(Request $request, $id) { $phone = new Phone(); $form = $this->createForm(PhoneType::class, $phone); dump($request->getMethod()); if ($request->isMethod('PUT')) { $form->handleRequest($request); $headers = array('Content-Type' => 'application/json'); $data = json_encode($phone); $response = Unirest\Request::put('link/phones/'.$id,$headers,$data); //$this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); dump($response->code); return $this->redirect($this->generateUrl('phones_list')); } $headers = array('Accept' => 'application/json'); $response = Unirest\Request::get('link/phones/'.$id,$headers); //$this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); dump($response->code); dump($response->body); return $this->render('AppBundle:Phone:PhoneUpdate.html.twig', array( 'form'=> $form->createView(), 'phone'=> $response->body, ));
И вот мой файл PhoneView.html.twig
{% extends "::base.html.twig" %} {% block title %}Accedant - {{ parent() }}{% endblock %} {% block body %} <form novalidate="novalidate" method = "get"> <p> <label> color </label> :<input type="text" value= {{ phone.color }} /> <label> price </label> :<input type="text" value= {{ phone.price }} /> <div class="form-group col-md-offset-5"> <button type="submit" class="btn btn-default">Save</button> </div> </p> </form> {# Updating Phone #} <p class="left-center"> <a href="{{ path('phones_update', {'id': phone.id}) }}" class="btn btn-mini btn-danger" class="btn btn-mini btn-danger"> Modify phone </a> </p> {% endblock %}
И вот мой PhoneUpdate.html.twig
{% extends "::base.html.twig" %} {% block title %} Phone - {{ parent() }}{% endblock %} {% block body %} <div class="container"> {{ form_start(form, {'method': 'PUT'}) }} <input type="hidden" name'_METHOD' value="PUT"> {{ form_widget(form) }} <input type="submit" value="Sauvegarder" class="btn btn-default" /> {{ form_end(form) }} </div> {% endblock %}
и вот мой файл routing.yml
phones_view: path: /phones/{id} defaults: { _controller: AppBundle:Phone:view } methods: [GET] requirements: id: \d+ phones_update: path: /phones/{id} methods: [PUT] defaults: { _controller: AppBundle:Phone:update } requirements: id: \d+
Спасибо за помощь.
Во-первых, мой метод put и delete не был сконфигурирован. Более того, моя проблема заключалась в том, что я думал, что метод put в моем файле маршрутизации routing.yml не имеет отношения к моим веб-службам. Поэтому я изменяю свой путь, чтобы отредактировать мою форму / update / {id} , и после этого у меня возникла ошибка 404, которая была из-за моей реализации на стороне J2EE.