it almost working
I wrote:
- Code: Select all
company_index:
pattern: /{_locale}/companies/{name}/{sort}/{sortType}/{page}
defaults: { _controller: BkielbasaDataManagerCoreBundle:Company:index, name: '', sort: 'name', sortType: 'DESC', page:1}
requirements:
culture: pl|en
page: \d+
name: (a-zA-Z0-9)*
sort: (a-zA-Z)*
sortType: (a-zA-Z)*
and it is ok, but when i set name = a i get error
An exception has been thrown during the rendering of a template ("Parameter "name" for route "company_index" must match "(a-zA-Z0-9)*" ("a" given).") in BkielbasaDataManagerCoreBundle:Pagination:pagination.html.twig at line 14
template:
- Code: Select all
{% if pagination.hasPagination()%}
<div class="paginator">
{% if pagination.getCurrentPage() != 1 %}
<a href="{{ path(pagination.getRoutingName(), pagination.getFirstPageArguments()) }}" class="page-far-left">First</a>
{% if pagination.getCurrentPage() != 2 %}
<a href="{{ path(pagination.getRoutingName(), pagination.getPrevPageArguments()) }}" class="page-left">Prev</a>
{% endif%}
{% endif%}
<div id="page-info">{% trans %}Page{% endtrans %} {{pagination.getCurrentPage()}} / {{pagination.countPages()}}</div>
{% if pagination.countPages() != pagination.getCurrentPage() %}
{% if pagination.countPages() - 1 != pagination.getCurrentPage() %}
<a href="{{ path(pagination.getRoutingName(), pagination.getNextPageArguments()) }}" class="page-right">Next</a>
{% endif%}
<a href="{{ path(pagination.getRoutingName(), pagination.getLastPageArguments()) }}" class="page-far-right">Last</a>
{% endif%}
</div>
{% endif %}
and here is my pagination clas:
- Code: Select all
<?php
namespace Bkielbasa\DataManager\CoreBundle\Helper;
/**
* Pagination class
*
* @author Bartłomiej Kiełbasa <bartlomiej.kielbasa@gmail.com>
*/
class Pagination {
/**
*
* @var int
*/
protected $_current_page;
/**
*
* @var int
*/
protected $_limit;
/**
* array with all items
* @var array
*/
protected $_items;
/**
* Argument to routing
* helps in creating correct nice URL's
* @var array
*/
protected $_routing_arguments = array();
/**
* Routing using to create URL's
* @var string
*/
protected $_routing_name;
/**
*
* @param array $items
* @param int $page
* @param int $limit
*/
function __construct(array $items, $page = 1, $limit = 10)
{
$this->_items = $items;
$this->_current_page = $page > 0 ? $page : 1;
$this->_limit = $limit;
foreach ($_GET as $name => $value) {
$this->addArgument($name, $value);
}
$this->addArgument('page', $this->_current_page);
}
function setRequest(\Symfony\Component\HttpFoundation\Request $request)
{
foreach ($request->attributes->all() as $name => $value) {
if ($name[0] != '_' && !$this->hasArgument($name)) {
$this->addArgument($name, $value);
}
}
}
/**
*
* @param int $page
*/
function setCurrentPage(int $page)
{
$this->_current_page = $page;
$this->_routing_arguments['page'] = $page;
}
/**
*
* @return int
*/
function getCurrentPage()
{
return $this->_current_page;
}
/**
*
* @param int $Limit
*/
function setLimit(int $Limit)
{
$this->_limit = $Limit;
}
/**
*
* @return int
*/
function getLimit()
{
return $this->_limit;
}
/**
* Returns items from current page
* @return array
*/
function getItems()
{
$count_items = count($this->_items);
$items = array_chunk($this->_items, $this->_limit);
return count($items) ? $items[$this->_current_page - 1] : array();
}
/**
* Returns true if pagination should be shown, otherwise returns false
* @return boolean
*/
function hasPagination()
{
return count($this->_items) > $this->_limit ? true : false;
}
/**
* Counts all pages in pagination
* @return int
*/
function countPages()
{
return ceil(count($this->_items) / $this->_limit);
}
/**
*
* @param string $key
* @param string $value
*/
function addArgument($key, $value)
{
$this->_routing_arguments[(string)$key] = (string)$value;
}
/**
*
* @param array $arguments
*/
function addArguments(array $arguments)
{
$this->_routing_arguments = array_merge($arguments, $this->_routing_arguments);
}
/**
*
* @return array
*/
function getArguments()
{
return $this->_routing_arguments;
}
function hasArgument($name)
{
return isset($this->_routing_arguments[$name]) ? true : false;
}
/**
*
* @return array
*/
function getFirstPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = 1;
return $args;
}
/**
*
* @return array
*/
function getSecondPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = 2;
return $args;
}
/**
*
* @return array
*/
function getPrevPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = $args['page'] - 1;
return $args;
}
/**
*
* @return array
*/
function getLastPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = $this->countPages();
return $args;
}
/**
*
* @return array
*/
function getNextPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = $args['page'] + 1;
return $args;
}
/**
*
* @return array
*/
function getBeforeLastPageArguments()
{
$args = $this->_routing_arguments;
$args['page'] = $this->countPages() - 1;
return $args;
}
/**
*
* @param string $routing
*/
function setRoutingName($routing)
{
$this->_routing_name = $routing;
}
function getRoutingName()
{
return $this->_routing_name;
}
}
the array I want to put to routing is:
- Code: Select all
array(4) {
["name"]=>
string(1) "a"
["page"]=>
float(2)
["sort"]=>
string(4) "name"
["sortType"]=>
string(4) "DESC"
}
what's wrong? Regexp is incorrect?