Я написал действие в контроллере. Я хочу передать массив результатов в файл twig и также использовать его для цикла.
Вот мой код действия в контроллере
public function searchBookAction(Request $request)
{
$q="PC";
$conn = $this->get('database_connection');
$results = $conn->fetchAll("SELECT name FROM products where name like '%".$q."%'");
return array('results' => $results);
}
вот мой код сводки:
{%for data in results%}
<li>{{ data.name|e }}</li>
{% endfor %}
</ul>
В этом коде я получаю эту ошибку: переменные "результаты" не существуют в NimoProBundle: Product: product.html.twig
Если вы хотите позвонить, чтобы использовать searchBookAction из javascript (как вы уже указали в своем комментарии), я бы предложил вам взглянуть на JsonResponse
. Он выполняет разбор массива в JsonFormat. Json может быть декодирован javascript без проблем.
В вашем контроллере:
public function searchBookAction(Request $request)
{
$q="PC";
$conn = $this->get('database_connection');
$results = $conn->fetchAll("SELECT name FROM products where name like '%".$q."%'");
return new JsonResponse(array('results' => $results);
}
В вашем javascript-коде (я предполагаю, что вы используете jQuery вместо написания запроса самостоятельно):
<script>
$.get('path/to/your/controller', {}, function(response){
response.results //<- here you have your results
});
</script>
Вы должны использовать $this->render()
на контроллере
return $this->render('template.html.twig', array(
'data' => $results,
));
в Twig вы сделали добро. Также не используйте соединение, подобное этому. Лучше использовать Doctrine ORM для своих моделей.
Заметка:
Если вы хотите использовать метод визуализации, вам необходимо расширить
Symfony\Bundle\FrameworkBundle\Controller\Controller;
сделать это
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
имя и использование выше класса extend
на ваш класс.
Вы также можете использовать
class YourController extends Symfony\Bundle\FrameworkBundle\Controller\Controller
но это не довольно решение
Это хорошая лекция для вас:
Поскольку вы не хотите ничего отображать в своем контроллере:
Если массив НЕ является сущностью, тогда вы можете использовать класс JsonResponse, который превращает массив в формат JSON, сериализуя его.
В вашем контроллере используйте: return new JsonResponse(array('name' => $name));
Затем вы можете использовать resp = JSON.parse(your_json_response);
в вашем javascript, чтобы декодировать его или просто сваливать в свою ветку. Или декодирование в веточке.