Symfony 3.4 如何将 Javascript 数据传递给控制器?
Symfony 3.4 how to pass Javascript data to controller?
我想在数据库中存储一个包含动态内容的 object。我有一个输入框,人们可以在其中输入文字。我希望输入字段的内容是 object 的标题。我可以通过 Javascript 获取内容并通过控制器保存 object。但是我不知道如何将数据从 Javascript 传递到控制器。
这是我已经尝试过的:
Javascript:
//Content I need to store
var outputOfInputField = document.getElementById("inputCategory").value;
//Ajax call with JSON that I think I need for pass data to controller.
$.ajax({
url : '/createcategory',
type: "POST",
data: {
'output': outputOfInputField
},
success : function (data) {
console.log("SUCCES" + data);
},
error : function () {
console.log("ERROR");
}
});
控制器:
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\User as User;
use Appbundle\Entity\Category as Category;
class HomePageController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function getData() {
...//Not important
}
/**
* @Route("/create-category", name="newCat")
*/
public function createObject() {
//Tried to get the data from JSON file here, dont know what it does and also does not work, gives me an error... Saying i need a use on top of this controller. If I add it it still dont work.
// $form = $this->get('form.factory')->createBuilder(FormType::class)
// ->add('ndf', CollectionType::class, array(
// 'entry_type' => NoteDeFraisType::class,
// 'label' => false,
// 'allow_add' => true,
// 'allow_delete' => true,
// ))
// ->getForm();
// if ($request->isXMLHttpRequest()) {
// $output = $request->request->get('output');
// echo $output;
// var_dump($output);
// print_r($output);
// }
//This is where I create the object and store it in the database.
$category = $this->getDoctrine()
->getRepository('AppBundle:Category')
->findall();
$category = new Category();
//At the $outputFromJavascript should be the place where my javascript content has to be. Now it does not work, it only works when I put a hardcoded text in it like this "Hello".
$category->setTitle($outputFromJavascript);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($category);
$em->flush();
return new Response('Created product id '.$category->getId());
}
}
希望我把问题说清楚了:)
我自己想出了解决方案 :D。我不知道我的函数中需要 Request,现在也知道它的作用了。
javascript保持不变,控制器现在看起来像这样:
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\User as User;
use Appbundle\Entity\Category as Category;
class HomePageController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function getData() {
//...
}
/**
* @Route("/create-category", name="newCat")
*/
public function createCategory(Request $request) {
// dump($request);
// dump($request->request->get('output'));
$output = $request->request->get('output');
$category = $this->getDoctrine()
->getRepository('AppBundle:Category')
->findall();
$category = new Category();
$category->setTitle($output);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($category);
$em->flush();
return new Response('Created product id '.$category->getId());
}
}
我changed/added:
//Added Request $request
public function createCategory(Request $request) {
//Added line for getting the output of ajax/json post.
$output = $request->request->get('output');
}
我想在数据库中存储一个包含动态内容的 object。我有一个输入框,人们可以在其中输入文字。我希望输入字段的内容是 object 的标题。我可以通过 Javascript 获取内容并通过控制器保存 object。但是我不知道如何将数据从 Javascript 传递到控制器。
这是我已经尝试过的:
Javascript:
//Content I need to store
var outputOfInputField = document.getElementById("inputCategory").value;
//Ajax call with JSON that I think I need for pass data to controller.
$.ajax({
url : '/createcategory',
type: "POST",
data: {
'output': outputOfInputField
},
success : function (data) {
console.log("SUCCES" + data);
},
error : function () {
console.log("ERROR");
}
});
控制器:
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\User as User;
use Appbundle\Entity\Category as Category;
class HomePageController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function getData() {
...//Not important
}
/**
* @Route("/create-category", name="newCat")
*/
public function createObject() {
//Tried to get the data from JSON file here, dont know what it does and also does not work, gives me an error... Saying i need a use on top of this controller. If I add it it still dont work.
// $form = $this->get('form.factory')->createBuilder(FormType::class)
// ->add('ndf', CollectionType::class, array(
// 'entry_type' => NoteDeFraisType::class,
// 'label' => false,
// 'allow_add' => true,
// 'allow_delete' => true,
// ))
// ->getForm();
// if ($request->isXMLHttpRequest()) {
// $output = $request->request->get('output');
// echo $output;
// var_dump($output);
// print_r($output);
// }
//This is where I create the object and store it in the database.
$category = $this->getDoctrine()
->getRepository('AppBundle:Category')
->findall();
$category = new Category();
//At the $outputFromJavascript should be the place where my javascript content has to be. Now it does not work, it only works when I put a hardcoded text in it like this "Hello".
$category->setTitle($outputFromJavascript);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($category);
$em->flush();
return new Response('Created product id '.$category->getId());
}
}
希望我把问题说清楚了:)
我自己想出了解决方案 :D。我不知道我的函数中需要 Request,现在也知道它的作用了。
javascript保持不变,控制器现在看起来像这样:
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use AppBundle\Entity\User as User;
use Appbundle\Entity\Category as Category;
class HomePageController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function getData() {
//...
}
/**
* @Route("/create-category", name="newCat")
*/
public function createCategory(Request $request) {
// dump($request);
// dump($request->request->get('output'));
$output = $request->request->get('output');
$category = $this->getDoctrine()
->getRepository('AppBundle:Category')
->findall();
$category = new Category();
$category->setTitle($output);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($category);
$em->flush();
return new Response('Created product id '.$category->getId());
}
}
我changed/added:
//Added Request $request
public function createCategory(Request $request) {
//Added line for getting the output of ajax/json post.
$output = $request->request->get('output');
}