$rules) { // top level if (is_array($rules)) { $ar = []; foreach ($rules as $rule) { if (is_string($rule) && strpos($rule, '|') !== false) { foreach (explode('|', $rule) as $rr) { $ar[] = $rr; } } else if (is_array($rule)) { // nested array, assume no further recursion foreach ($rule as $rr) { $ar[] = $rr; } } else { // Rule $ar[] = $rule; } } $result[$key] = $ar; } else { // string or Rule $result[$key] = $rules; } } return $result; } /** * like old(), but decodes stringified json * * @param string $name * @param object|array $default * @return object|array */ function old_json($name, $default) { $old = old($name, null); if (is_string($old)) return fromJSON($old); return $default; } // Safe JSON funcs function toJSON($object, $emptyObj=false) { if ($emptyObj) { if ((empty($object) || ($object instanceof \Illuminate\Support\Collection && $object->count()==0))) { return '{}'; } } if (!$object instanceof JsonSerializable && $object instanceof \Illuminate\Contracts\Support\Arrayable) { $object = $object->toArray(); } return \GuzzleHttp\json_encode($object); } function fromJSON($object, $assoc=false) { return \GuzzleHttp\json_decode($object, $assoc); } /** * @param \Illuminate\Support\Collection|array $items * @param int $per_page * @param null|\Closure $mapFn * @return \Illuminate\Pagination\LengthAwarePaginator */ function collection_paginate($items, $per_page, $mapFn = null) { if (!$items instanceof \Illuminate\Support\Collection) { $items = collect($items); } $page = Request::get('page', 1); $pageItems = $items->forPage($page, $per_page)->values(); if (count($pageItems) == 0 && $page > 1) { $page = 1; Request::replace(['page' => $page]); $pageItems = $items->forPage($page, $per_page)->values(); } return new Illuminate\Pagination\LengthAwarePaginator( $mapFn ? $pageItems->map($mapFn) : $pageItems, $items->count(), $per_page, Illuminate\Pagination\Paginator::resolveCurrentPage(), ['path' => Illuminate\Pagination\Paginator::resolveCurrentPath()] ); }