zblog.local/shop/category/1
Warning: array_merge(): Argument #2 is not an array in C:\xampp\htdocs\zblog.local\module\Shop\src\Controller\CategoryController.php on line 54
Warning: array_merge(): Argument #1 is not an array in C:\xampp\htdocs\zblog.local\module\Shop\src\Controller\CategoryController.php on line 54
$categoryId = $this->params()->fromRoute('id', -1);
$cat = $this->entityManager->getRepository(Category::class)
->ChildrenCategory($categoryId); var_dump($cat);
if ($cat == null) {
$queries = $this->entityManager->getRepository(Products::class)
->getProductsById($categoryId);
} else {
foreach ($cat as $c){
$queries = $this->entityManager->getRepository(Products::class)
->getProductsById($c->getId());
}
$valueOptions = [];
foreach ($sm as $s) {
$valueOptions[$s->getCategory()->getId()] = $s->getCategory()->getCategory();
}
var_dump($valueOptions);
$form->get('category_id')->setValueOptions($valueOptions);
/**
* Менеджер сущностей.
* @var Doctrine\ORM\EntityManager
*/
protected $entityManager;
/**
* Менеджер постов.
* @var Admin\Service\CategoryManager
*/
private $productsManager;
// Метод конструктора, используемый для внедрения зависимостей в контроллер.
public function __construct(\Doctrine\ORM\EntityManager $entityManager, \Admin\Service\ProductsManager $productsManager)
{
$this->entityManager = $entityManager;
$this->productsManager = $productsManager;
}
public function addAction()
{
$sm = $this->entityManager;
// Создаем форму.
$form = new ProductsForm($sm);
$valueOptions = [];
foreach ($sm as $s) {
$valueOptions[$s->getCategory()->getId()] = $s->getCategory()->getCategory();
}
var_dump($valueOptions);
$form->get('category_id')->setValueOptions($valueOptions);
// Проверяем, является ли пост POST-запросом.
if ($this->getRequest()->isPost()) {
// Получаем POST-данные.
$data = $this->params()->fromPost();
// $form = setHydrator(new DoctrineHydrator($sm, '\Products'));
// Заполняем форму данными.
$form->setData($data);
if ($form->isValid()) {
// Получаем валидированные данные формы.
$data = $form->getData();
var_dump($data);
// Используем менеджер постов для добавления нового поста в базу данных.
$this->productsManager->addNewProduct($data);
// Перенаправляем пользователя на страницу "index".
return $this->redirect()->toRoute('admin/products');
}
}
// Визуализируем шаблон представления.
return new ViewModel([
'form' => $form
]);
}
// Добавляем поле "Выбора категорий"
$this->add([
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'name' => 'category_id',
'attributes' => [
'id' => 'categoryId',
'class' => 'form-control',
],
'options' => [
'label' => 'Категория',
'object_manager' => $this->getObjectManager(),
'target_class' => 'Shop\Entity\Category',
'property' => 'category',
],
]);
public function addNewProduct($data)
{
// Создаем новую сущность Post.
$product = new Products();
$product->setName($data['name']);
$product->setPrice($data['price']);
$product->setCategory($data['category_id']);
$product->setDescription($data['description']);
$product->setStatus($data['status']);
// Добавляем сущность в менеджер сущностей.
$this->entityManager->persist($product);
// Применяем изменения к базе данных.
$this->entityManager->flush();
}
array(0) { } array(6) { ["name"]=> string(16) "Брабус 5в" ["price"]=> string(5) "54321" ["description"]=> string(21) "Описание 3333" ["category_id"]=> string(1) "1" ["status"]=> string(1) "1" ["submitAdd"]=> string(16) "Добавить" }Данные как раз те которые нужны для сохранения и ругается интерпритатор на ["category_id"]=> string(1) "1".
/**
* Set category
*
* @param \Shop\Entity\Category $category
*
* @return Products
*/
public function setCategory(\Shop\Entity\Category $category = null)
{
$this->category = $category;
return $this;
}
public function findAllProductsWithCategory()
{
$entityManager = $this->getEntityManager();
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('p')
->from(Products::class, 'p')
->join('p.category', 'c')
->where('p.category_id = ?1')
->orderBy('p.id', 'DESC')
->setParameter('1', 'c.id');
return $queryBuilder->getQuery();
}
public function indexAction()
{
$query = $this->entityManager->getRepository(Products::class)
->findAllProductsWithCategory();
// var_dump($query); die();
$page = $this->params()->fromQuery('page', 1);
$adapter = new DoctrineAdapter(new ORMPaginator($query, false));
$paginator = new Paginator($adapter);
$paginator->setDefaultItemCountPerPage(1);
$paginator->setCurrentPageNumber($page);
// Визуализируем шаблон представления.
return new ViewModel([
'products' => $paginator,
]);
}
<table class="table table-striped table-hover">
<tbody>
<tr>
<th>ID</th>
<th>Название</th>
<th>Цена</th>
<th>Категория</th>
<th>Описание</th>
<th>Изображение</th>
<th>Действие</th>
</tr>
<?php foreach($products as $product):?>
<tr>
<td><?php echo $this->escapeHtml($product->getId());?></td>
<td><?php echo $this->escapeHtml($product->getName());?></td>
<td><?php echo $this->escapeHtml($product->getPrice());?></td>
<td><?php echo $this->escapeHtml($product->getCategory());?></td>
<td><?php echo $this->escapeHtml($product->getDescription());?></td>
<td><?php echo $this->escapeHtml($product->getImage());?></td>
<td>
<a class="btn btn-success" href="<?= $this->url('admin/products', ['action' => 'edit', 'id' => $product->getId()]);?>"><span class="glyphicon glyphicon-pencil" ></span> Редактировать</a><?php echo ' '?>
<a class="btn btn-danger" href="<?= $this->url('admin/products', ['action' => 'delete', 'id' => $product->getId()]);?>" onclick="if(confirm(\'Удалить запись?\')) {document.location = this.href;} return false;"><span class="glyphicon glyphicon-remove"></span> Удалить</a>
</td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<?= $this->paginationControl($products,
'Sliding',
'application/partial/paginator',
['route' => 'admin/products']); ?>