2015-08-04 3 views
8

Я читал документацию laravel 5.1. Я не понимал, как работает группа маршрутов laravel и какая разница между следующими группами маршрутов.Разница между группой маршрутов промежуточного слоя и группой маршрутов имен в laravel 5.1?

Маршрут группы & Названные Маршруты

Если вы используете группы маршрутизации, вы можете указать в качестве ключевого слова в массиве атрибутов маршрута группы, что позволяет установить общий префикс имен маршрутов для всех маршрутов в группе :

Route::group(['as' => 'admin::'], function() { 
    Route::get('dashboard', ['as' => 'dashboard', function() { 
     // Route named "admin::dashboard" 
    }]); 
}); 

Middleware

Чтобы назначить промежуточное программное обеспечение для всех маршрутов в группе, вы может использовать ключ промежуточного программного обеспечения в массиве атрибутов группы. Промежуточное будет выполняться в порядке, можно определить этот массив:

Route::group(['middleware' => 'auth'], function() { 
    Route::get('/', function() { 
     // Uses Auth Middleware 
    }); 

    Route::get('user/profile', function() { 
     // Uses Auth Middleware 
    }); 
}); 

Namespaces

Другой распространенный вариант использования для маршрутных групп назначая тот же PHP пространство имен для группы контроллеров. Вы можете использовать параметр пространства имен в массиве атрибутов группы, чтобы указать пространство имен для всех контроллеров в группе:

Route::group(['namespace' => 'Admin'], function() 
    { 
     // Controllers Within The "App\Http\Controllers\Admin" Namespace 
     Route::group(['namespace' => 'User'], function() 
     { 
      // Controllers Within The "App\Http\Controllers\Admin\User" Namespace 
     }); 
    }); 

Поддомен маршрутизация

группа маршрутов также может использоваться для маршрутизации подстановочных суб- домены. Поддоменам могут быть назначены параметры маршрута, аналогичные маршрутным URI, позволяющие вам захватить часть поддомена для использования в вашем маршруте или контроллере. Суб-домен может быть указан с помощью ключа домена на массиве атрибутов группы:

Route::group(['domain' => '{account}.myapp.com'], function() { 
    Route::get('user/{id}', function ($account, $id) { 
     // 
    }); 
});  

Маршрута префиксы

атрибут массива префикса группы может быть использован в качестве префикса каждого маршрута в группе с данным URI. Например, вы можете добавить префикс всех идентификаторов URI маршрута в пределах группы с администратором:

Route::group(['prefix' => 'admin'], function() { 
    Route::get('users', function() { 
     // Matches The "/admin/users" URL 
    }); 
}); 

Вы также можете использовать параметр префикса для определения общих параметров для сгруппированных маршрутов:

Route::group(['prefix' => 'accounts/{account_id}'], function() { 
    Route::get('detail', function ($account_id) { 
     // Matches The accounts/{account_id}/detail URL 
    }); 
}); 

Ref: http://laravel.com/docs/5.1/routing

ответ

9

Группы маршрутов позволяют группировать маршруты, которые имеют общие атрибуты, без переопределения указанных атрибутов для каждого маршрута.

Пример

В качестве примера позволяет использовать пространства имен атрибут массива.

Скажем, у нас есть контроллер под названием NewsController, который содержит всю логику администратора для раздела новостей ваших приложений. Вы можете разместить этот файл в каталоге «App/Http/Controllers/Admin».

Laravel 5 следует PSR-4 autoloading conventions, так что приложение expcets пространство имен, чтобы быть идентичным путь к файлу, так что наш класс может выглядеть примерно так:

<?php 

namespace App\Http\Controllers\Admin; 

class NewsController 
{ 

} 

Мы могли бы написать маршрут к этому классу, как так:

Route::get('admin/news', [ 
    'uses' => 'Admin\[email protected]' 
]); 

Примечание: Laravel автоматически принимает на себя все ваши контроллеры будут находиться в директории App/Http/Controllers так что мы можем оставить это из любые объявления контроллеров в файле маршрутов.

Вышеупомянутый должен работать нормально, но, возможно, у вас также есть дюжина других файлов классов, которые имеют дело с логикой администратора в пределах одного и того же пространства имен. Мы можем использовать опцию namespace, чтобы сгруппировать их вместе.

Route::group(['namespace' => 'Admin'], function() 
{ 
    Route::get('admin/news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('admin/users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

Обратите внимание, как я больше не определяю Admin пространства имен для контроллера для каждого маршрута.

Тот же процесс может быть применен к промежуточным слоям, субдоменам и префиксам URL.

Далее Пример

Давайте первый пример и построить на нем. Как видно из приведенных выше объявлений маршрута, все наши маршруты администратора имеют общий префикс URL.

http://example.com/админ/Новости
http://example.com/админ/пользователи

Мы можем использовать атрибут prefix массива, чтобы определить общий URL для наших маршрутов. В нашем случае это admin.

Наши обновленные объявления маршрутов будут выглядеть так.

Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() 
{ 
    Route::get('news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

Возможно, вам интересно, почему это было бы полезно? Представьте, что вы разработали большое приложение с десятками, если не сотнями маршрутов. Тогда однажды ваш босс приходит к вам и говорит: «Привет, мистер, нам нужно изменить адрес администратора от /admin до /cms, как долго это займет?».

Если вы указали все свои маршруты, используя группы с атрибутом массива префикса, как указано выше, это будет простой и безболезненный процесс для вас.

+0

Благодарим вас за хорошее объяснение. Я попробую это с одним примером проекта. – vision

+0

как разрешить доступ только администратору? .suppose, если у нас есть несколько пользователей, таких как admin, manager и обычный пользователь. – vision

+0

@tester Thats, когда вы захотите использовать атрибут промежуточного программного обеспечения. – Jeemusu

Смежные вопросы