Eccube\Controller\ProductController::index PHP Метод

index() публичный Метод

public index ( Application $app, Request $request )
$app Eccube\Application
$request Symfony\Component\HttpFoundation\Request
    public function index(Application $app, Request $request)
    {
        $BaseInfo = $app['eccube.repository.base_info']->get();
        // Doctrine SQLFilter
        if ($BaseInfo->getNostockHidden() === Constant::ENABLED) {
            $app['orm.em']->getFilters()->enable('nostock_hidden');
        }
        // handleRequestは空のqueryの場合は無視するため
        if ($request->getMethod() === 'GET') {
            $request->query->set('pageno', $request->query->get('pageno', ''));
        }
        // searchForm
        /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
        $builder = $app['form.factory']->createNamedBuilder('', 'search_product');
        $builder->setAttribute('freeze', true);
        $builder->setAttribute('freeze_display_text', false);
        if ($request->getMethod() === 'GET') {
            $builder->setMethod('GET');
        }
        $event = new EventArgs(array('builder' => $builder), $request);
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_INITIALIZE, $event);
        /* @var $searchForm \Symfony\Component\Form\FormInterface */
        $searchForm = $builder->getForm();
        $searchForm->handleRequest($request);
        // paginator
        $searchData = $searchForm->getData();
        $qb = $app['eccube.repository.product']->getQueryBuilderBySearchData($searchData);
        $event = new EventArgs(array('searchData' => $searchData, 'qb' => $qb), $request);
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_SEARCH, $event);
        $searchData = $event->getArgument('searchData');
        $pagination = $app['paginator']()->paginate($qb, !empty($searchData['pageno']) ? $searchData['pageno'] : 1, $searchData['disp_number']->getId());
        // addCart form
        $forms = array();
        foreach ($pagination as $Product) {
            /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
            $builder = $app['form.factory']->createNamedBuilder('', 'add_cart', null, array('product' => $Product, 'allow_extra_fields' => true));
            $addCartForm = $builder->getForm();
            if ($request->getMethod() === 'POST' && (string) $Product->getId() === $request->get('product_id')) {
                $addCartForm->handleRequest($request);
                if ($addCartForm->isValid()) {
                    $addCartData = $addCartForm->getData();
                    try {
                        $app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'])->save();
                    } catch (CartException $e) {
                        $app->addRequestError($e->getMessage());
                    }
                    $event = new EventArgs(array('form' => $addCartForm, 'Product' => $Product), $request);
                    $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_COMPLETE, $event);
                    if ($event->getResponse() !== null) {
                        return $event->getResponse();
                    }
                    return $app->redirect($app->url('cart'));
                }
            }
            $forms[$Product->getId()] = $addCartForm->createView();
        }
        // 表示件数
        $builder = $app['form.factory']->createNamedBuilder('disp_number', 'product_list_max', null, array('empty_data' => null, 'required' => false, 'label' => '表示件数', 'allow_extra_fields' => true));
        if ($request->getMethod() === 'GET') {
            $builder->setMethod('GET');
        }
        $event = new EventArgs(array('builder' => $builder), $request);
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_DISP, $event);
        $dispNumberForm = $builder->getForm();
        $dispNumberForm->handleRequest($request);
        // ソート順
        $builder = $app['form.factory']->createNamedBuilder('orderby', 'product_list_order_by', null, array('empty_data' => null, 'required' => false, 'label' => '表示順', 'allow_extra_fields' => true));
        if ($request->getMethod() === 'GET') {
            $builder->setMethod('GET');
        }
        $event = new EventArgs(array('builder' => $builder), $request);
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_ORDER, $event);
        $orderByForm = $builder->getForm();
        $orderByForm->handleRequest($request);
        $Category = $searchForm->get('category_id')->getData();
        return $app->render('Product/list.twig', array('subtitle' => $this->getPageTitle($searchData), 'pagination' => $pagination, 'search_form' => $searchForm->createView(), 'disp_number_form' => $dispNumberForm->createView(), 'order_by_form' => $orderByForm->createView(), 'forms' => $forms, 'Category' => $Category));
    }