Laravel 4: Заголовок разбивки и сортировки

У меня проблема с Laravel Pagination и Header Sort, Позвольте мне показать вам, что у меня есть.

Моя текущая страница, с которой я работаю, – «admin / admins», где у меня есть разбиение на страницы и заголовки.

1) Код AdminController:

// get for admin/admins page // page to list all the Admin users public function getAdmins($sort= NULL , $sort_dir = NULL) { // CACHE SORTING INPUTS $allowed = array('first_name', 'last_name', 'email', 'activated', 'created_at'); // add allowable columns to search on $sort = in_array($sort, $allowed) ? $sort : 'first_name'; // if user type in the url a column that doesn't exist app will default to first_name // header links setup. $params = Request::except(['sort','sort_dir']); $sort_dir = ($sort_dir == 'asc') ? 'desc' : 'asc'; $i = 0 ; foreach ($allowed as $allow) { $attributes[$i] = array_merge(['sort' => $allowed[$i], 'sort_dir' => $sort_dir], $params); $i++; } // select all admins Group = 1 $admins = DB::table('users') ->join('users_roles', 'users.id', '=', 'users_roles.user_id') ->where('users_roles.role_id', '=' ,0) ->orderBy($sort, $sort_dir) ->paginate($this->perpage); // check for actions if (!is_null(Input::get('action'))) { $action = Input::get('action'); if ($action == "add") { $this->layout->content = View::make('admin.admins-add'); } } else { // get current counter admin counts $counter = $admins->getFrom(); View::share('counter', $counter); View::share('attributes', $attributes); // share admin with template View::share('admins', $admins); $this->layout->content = View::make('admin.admins'); } } 

2) route.php :

 Route::controller('admin', 'AdminController'); 

3) view/admin/admins.blade.php (для создания ссылок заголовка):

 <th>{{ link_to_action('AdminController@getAdmins', 'First Name', $attributes[0]) }}</th> <th>{{ link_to_action('AdminController@getAdmins', 'Last Name' , $attributes[1]) }}</th> <th>{{ link_to_action('AdminController@getAdmins', 'Email' , $attributes[2]) }}</th> <th>{{ link_to_action('AdminController@getAdmins', 'Activated' , $attributes[3]) }}</th> <th>{{ link_to_action('AdminController@getAdmins', 'Created' , $attributes[4]) }}</th> <th>Actions</th> {{ $admins->links() }} 

4) {{ $admins->links() }} будет генерировать ссылки на страницы, как мы знаем

ЗДЕСЬ МОЯ ПРОБЛЕМА Сгенерированные ссылки выглядят так:

 <tr> <th><a href="admin/admins/first_name/asc">First Name</a></th> <th><a href="admin/admins/last_name/asc">Last Name</a></th> <th><a href="admin/admins/email/asc">Email</a></th> <th><a href="admin/admins/activated/asc">Activated</a></th> <th><a href="admin/admins/created_at/asc">Created</a></th> <th>Actions</th> </tr> 

Что выглядит хорошо, но проблема, когда вы переходите на вторую страницу, сгенерированные ссылки выглядят так:

 <tr> <th><a href="admin/admins/first_name/asc/2">First Name</a></th> <th><a href="admin/admins/last_name/asc/2">Last Name</a></th> <th><a href="admin/admins/email/asc/2">Email</a></th> <th><a href="admin/admins/activated/asc/2">Activated</a></th> <th><a href="admin/admins/created_at/asc/2">Created</a></th> <th>Actions</th> </tr> 

Когда я нажимаю на любой из них, он переводит меня на первую страницу, а разбиение на страницы не работает. Как я могу это исправить? Класс pagination не имеет чистого URL-адреса, единственный способ, которым он будет работать, если я сделаю свой URL-адрес следующим образом:

 <tr> <th><a href="admin/admins/first_name/asc/?page=2">First Name</a></th> <th><a href="admin/admins/last_name/asc/?page=2">Last Name</a></th> <th><a href="admin/admins/email/asc/?page=2">Email</a></th> <th><a href="admin/admins/activated/asc/?page=2">Activated</a></th> <th><a href="admin/admins/created_at/asc/?page=2">Created</a></th> <th>Actions</th> </tr> 

Может быть, вы уже получили решение к тому времени, но я сделал это:

В вашем контроллере:

 $sort = Input::get('sort')=== '' ? 'id': Input::get('sort'); $sort_dir = Input::get('sort_dir') === 'asc' ? 'asc' : 'desc'; 

В вашем представлении / admin / admins.blade.php вы можете вручную создать ссылку следующим образом:

Сначала определите $ page

 @if($page = $admins->getCurrentPage() )@endif 

затем

 <th> @if ($sort == 'first_name' && $sort_dir == 'asc') <a href="{{ Request::url() }}?page={{$page}}&sort_dir=desc&sort={{$sort}}">First Name</a> @else <a href="{{ Request::url() }}?page={{$page}}&sort_dir=asc&sort={{$sort}}">First Name</a> @endif </th> 

Должно быть другим способом, но это сработало для меня!