* @license http://github.com/basdenooijer/solarium/raw/master/COPYING * @link http://www.solarium-project.org/ * * @package Solarium */ /** * PostBigRequest plugin * * If you reach the url/header length limit of your servlet container your queries will fail. * You can increase the limit in the servlet container, but if that's not possible this plugin can automatically * convert big GET requests into POST requests. A POST request (usually) has a much higher limit. * * The default maximum querystring length is 1024. This doesn't include the base url or headers. * For most servlet setups this limit leaves enough room for that extra data. Adjust the limit if needed. * * @package Solarium * @subpackage Plugin */ class Solarium_Plugin_PostBigRequest extends Solarium_Plugin_Abstract { /** * Default options * * @var array */ protected $_options = array( 'maxquerystringlength' => 1024, ); /** * Set maxquerystringlength enabled option * * @param integer $value * @return self Provides fluent interface */ public function setMaxQueryStringLength($value) { return $this->_setOption('maxquerystringlength', $value); } /** * Get maxquerystringlength option * * @return integer */ public function getMaxQueryStringLength() { return $this->getOption('maxquerystringlength'); } /** * Event hook to adjust client settings just before query execution * * @param Solarium_Query $query * @param Solarium_Client_Request $request * @return void */ public function postCreateRequest($query, $request) { $queryString = $request->getQueryString(); if ($request->getMethod() == Solarium_Client_Request::METHOD_GET && strlen($queryString) > $this->getMaxQueryStringLength()) { $request->setMethod(Solarium_Client_Request::METHOD_POST); $request->setRawData($queryString); $request->clearParams(); $request->addHeader('Content-Type: application/x-www-form-urlencoded'); } } }