浏览代码

switch form to use GET, disable csrf, add pagerfanta SolariumAdapter

Igor Wiedler 13 年之前
父节点
当前提交
1577ae88ce

+ 7 - 16
src/Packagist/WebBundle/Controller/WebController.php

@@ -30,6 +30,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
 use Symfony\Component\Security\Core\Exception\AccessDeniedException;
 use Pagerfanta\Pagerfanta;
 use Pagerfanta\Adapter\DoctrineORMAdapter;
+use Pagerfanta\Adapter\SolariumAdapter;
 
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -47,7 +48,10 @@ class WebController extends Controller
      */
     public function indexAction()
     {
-        return array('page' => 'home');
+        $searchQuery = new SearchQuery;
+        $form = $this->createForm(new SearchQueryType, $searchQuery);
+
+        return array('page' => 'home', 'form' => $form->createView());
     }
 
     /**
@@ -88,7 +92,7 @@ class WebController extends Controller
         $searchQuery = new SearchQuery;
         $form = $this->createForm(new SearchQueryType, $searchQuery);
 
-        if ('POST' === $req->getMethod()) {
+        if ($req->query->has('search_query')) {
             $form->bindRequest($req);
             if ($form->isValid()) {
                 $solarium = $this->get('solarium.client');
@@ -96,20 +100,7 @@ class WebController extends Controller
                 $query = $solarium->createSelect();
                 $query->setQuery($searchQuery->getQuery());
 
-                $resultset = $solarium->select($query);
-
-                $packageIds = array_map(
-                    function ($document) {
-                        return $document->id;
-                    },
-                    iterator_to_array($resultset)
-                );
-
-                $packages = $this->getDoctrine()
-                    ->getRepository('PackagistWebBundle:Package')
-                    ->findByIds($packageIds);
-
-                $paginator = new Pagerfanta(new DoctrineORMAdapter($packages, true));
+                $paginator = new Pagerfanta(new SolariumAdapter($solarium, $query));
                 $paginator->setMaxPerPage(15);
                 $paginator->setCurrentPage($req->query->get('page', 1), false, true);
 

+ 2 - 1
src/Packagist/WebBundle/Form/Type/SearchQueryType.php

@@ -22,13 +22,14 @@ class SearchQueryType extends AbstractType
 {
     public function buildForm(FormBuilder $builder, array $options)
     {
-        $builder->add('query');
+        $builder->add('query', 'search');
     }
 
     public function getDefaultOptions(array $options)
     {
         return array(
             'data_class' => 'Packagist\WebBundle\Form\Model\SearchQuery',
+            'csrf_protection' => false,
         );
     }
 

+ 3 - 1
src/Packagist/WebBundle/Resources/views/Web/search.html.twig

@@ -3,7 +3,7 @@
 {% block content %}
     <div class="box clearfix">
         <h1>Search packages</h1>
-        <form id="search-form" action="{{ path('search') }}" method="POST" {{ form_enctype(form) }}>
+        <form id="search-form" action="{{ path('search') }}" method="GET" {{ form_enctype(form) }}>
             <div>
                 <p>
                     {{ form_errors(form.query) }}
@@ -15,6 +15,8 @@
         </form>
     </div>
 
+    &nbsp;
+
     {% if packages is defined %}
         {{ parent() }}
     {% endif %}

+ 2 - 2
src/Packagist/WebBundle/Resources/views/macros.html.twig

@@ -3,8 +3,8 @@
         {% for package in packages %}
             <li>
                 <h1><a href="{{ path('view_package', { 'name' : package.name }) }}">{{ package.name }}</a></h1>
-                {% if package.versions|length and package.versions[0].description|length %}
-                    <p class="package-description">{{ package.versions[0].description }}</p>
+                {% if package.description %}
+                    <p class="package-description">{{ package.description }}</p>
                 {% endif %}
             </li>
         {% endfor %}