Задать вопрос
  • Как быть с маршрутами?

    @T_verdisla_V Автор вопроса
    Arik: id должно меняться согласно выбранного элемента.
  • Как быть с маршрутами?

    @T_verdisla_V Автор вопроса
    Arik: ссылки все становятся
    zblog.local/shop/category/1
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon: Заметил))))
    Примерно через час скину, сына надо забрать, там укажу и репозиторий, правда на bitbucket.org, с github что то я не подружился.
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon: Напиши почту я в ворде скину то что возвращается в $queries.
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    Николай Громов: Напиши почту я в ворде скину то что возвращается в $queries.
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    Николай Громов: Напиши почту я в ворде скину то что возвращается в $queries.
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon: проверяю то я не тех категориях в которых я точно знаю есть продукты, так что данный вариант не пройдет, тем более интерпритатор то ругается на то что аргументы array_merge не являются массивами, а не то что они пусты. И еще раз повторяю мне нельзя переделывать эти объекты в массив, пагинатор их не поймет.
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon: $newqueries является объектом причем не таким как вопросе, а на несколько страниц машинописного текста. Объекты можно также смержить?
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon:
    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
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    MrTimon: вобщем у меня есть такой код в контроллере
    $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());  
            }

    Получается на главной странице есть меню с элементами подменю. Выбирая какой-либо пункт меню мы передаем его id которое в этом контроллере отлавливается. По этому id ищутся дочернии категории если их нет значит мы уже в дочерней категории и нужно только вызвать продукты связанные с этой дочерней категорией. Если же мы выбрали главную категорию то у нас может быть несколько дочерних (массив как в вопросе) категорий, а у них соответственно множество продуктов. Переменная $queries передается в пагинатор, и для нее сделан специальный запрос, который возвращает объект необходимый пагинатору. Так вот данном варианте кода цикл возвращает мне объект последней итерации (т.е. последней дочерней категории), а мне нужны все. Как можно это сделать?
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    Да, так работает только у меня в каждом объекте есть элемент "id", пробывал через foreach перебрать массив (по моему что то не то написал в цикле), но тогда он выдает мне только значения последнего массива
  • Как обратиться к элементу объекта который находится в массиве?

    @T_verdisla_V Автор вопроса
    гетеры и сетеры прописаны в сущности.
  • Как вытащить объект из цикла?

    @T_verdisla_V Автор вопроса
    alex-php: пагинатор не понимает массив, для него создается специальный объект.
  • Как вытащить объект из цикла?

    @T_verdisla_V Автор вопроса
    McMike:
    в цикле у меня обрабатывается объект, и мне нужен не конкретный элемент объекта, а сам объект.
    Я знаю что $queries на каждой итерации разное.
  • Как понимать данную ошибку?

    @T_verdisla_V Автор вопроса
    $valueOptions = [];
            foreach ($sm as $s) {
                $valueOptions[$s->getCategory()->getId()] = $s->getCategory()->getCategory();
            }
             var_dump($valueOptions);
            $form->get('category_id')->setValueOptions($valueOptions);

    Этот участок кода не рассматривайте, это я пробывал кое-что, но не помогло.
    По идее при отправке формы проверяется была ли она отправлена post запросом, если да то эти данные проверяются и записываются в $data (это массив который показывал в предыдущем комментарии) которая передается в productsmanager.php где эти данные записываются в таблицу. Получается что в массива $data в ["category_id"] должен быть экземпляр класса Shop\Entity\Category, а вот как его туда передать я не знаю. Вообще в этом поле отображается перечень всех категорий из таблицы Category, но на запись в Products идет уже их id, так и должно быть.
  • Как понимать данную ошибку?

    @T_verdisla_V Автор вопроса
    ProductsController.php
    /**
         * Менеджер сущностей.
         * @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
            ]);
        }


    ProductsForm.php та часть из-за которой проблема
    // Добавляем поле "Выбора категорий"
            $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',
                ],
            ]);


    ProductsManager.php
    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();
        }


    Таблица products и category связаны через сущности через поле category_id таблицы products. В контроллере стоит вардамп вот что в него приходит
    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".
    А по поводу того что сразу не выложил код. Так когда я пишу про зенд мне вообще никто не отвечает.

    p.s. Entity\Products.php
    /** 
         * Set category
         * 
         * @param \Shop\Entity\Category $category
         * 
         * @return Products
         */ 
        public function setCategory(\Shop\Entity\Category $category = null)
        {
            $this->category = $category;
    
            return $this;
        }
  • Как понимать данную ошибку?

    @T_verdisla_V Автор вопроса
    Если я покажу вам код, сможете помочь, хотя бы подсказать в каком направлении двигаться?
  • Как понимать данную ошибку?

    @T_verdisla_V Автор вопроса
    Вы знакомы с зендом, хотя бы со вторым?
  • Как правильно создать запрос в доктрине?

    @T_verdisla_V Автор вопроса
    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();
        }

    Попробывал так переделать результат тот же!
  • Как правильно создать запрос в доктрине?

    @T_verdisla_V Автор вопроса
    Это код из контроллера, запрос из репозитория был указан в вопросе
    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 '&nbsp;&nbsp;'?>
                        <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']); ?>