Хотелось бы рассказать о решении нескольких неприятных моментов.
1. Вместо route=blablabla попробуйте route[]=blablabla
2. Вместо path=blablabla попробуйте path[]=blablabla
3. http://demo.myopencart.ru/index.php?route=common/home/__construct
4. В строке поиска передаем массив
5. Формы авторизации обратной связи и подобные подвержены этой проблеме
Решение: В system/library/request.php добавить метод
/**
* This function performs validation of the input parametrs
* If somebody wants to use Array instead of string param,
* this function will prevent php warnings
* by imploding the input array to the string
* @param String $key, $value
* @return true
*/
private function getValidValue ( $key, $value = '' )
{
$strKeysArray = array ( 'selected', 'option', 'order_product', 'order_total' );
if ( '/admin/index.php' == $_SERVER['PHP_SELF'] )
{
$adminCheckKeys = array ( 'route', 'username', 'password', 'email' );
if ( in_array ( $key, $adminCheckKeys ) && ! empty ( $value ) && is_array ( $value ) )
return $this->multi_implode ( $value );
} else {
if ( ! in_array ( $key, $strKeysArray ) && ! empty ( $value ) && ! preg_match ( '#\d+#', $key ) && is_array ( $value ) )
return $this->multi_implode ( $value );
}
return $value;
}
private function multi_implode( $sep = '', $array = array() )
{
is_array ( $sep ) && $array = $sep;
is_array ( $sep ) && $sep = '';
$_array = array();
foreach( $array as $val )
{
$_array[] = is_array( $val ) ? $this->multi_implode($sep, $val) : $val;
}
return implode( $sep, $_array );
}
Найти:
$data[$this->clean($key)] = $this->clean($value);
Выше вставить:
is_array ( $value ) && $value = $this->getValidValue ( $this->clean($key), $value );
--------------------------------
В /system/engine/action.php найти:
if ($method) {
$this->method = $method;
} else {
$this->method = 'index';}
Выше вставить:
'__construct' == $method && $method = null;
Пришлось делать правки в ядре, но увы.
Пример #1:
Пример #2:
Пример #3:
Пример #4 ( пытаемся в куку писать мусор, при помощи валют ):
Пример #5 ( немного массива вместо файла ):