Роутинг (маршрутизация)

October CMS Documentation Docs

Роутинг (маршрутизация)

# Простейшая маршрутизация

Вы можете указать произвольные маршруты в файле routes.php в папке с плагином. Простейший роут состоит из URI (урла, пути) и функции-замыкания (она же коллбек):

Route::get('/', function () {
    return 'Hello World';
});

Route::post('foo/bar', function () {
    return 'Hello World';
});

Route::put('foo/bar', function () {
    //
});

Route::delete('foo/bar', function () {
    //
});

# Регистрация роута для нескольких методов

Route::match(['get', 'post'], '/', function () {
    return 'Hello World';
});

Регистрация роута для любого типа HTTP-запроса:

Route::any('foo', function () {
    return 'Hello World';
});

# Генерация URL

Используйте метод to, чтобы сгенерировать URL:

$url = Url::to('foo');

# Параметры роутов

# Обязательные параметры

Вы можете использовать параметры, чтобы передать произвольное значение. Например id пользователя:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

Вы можете использовать столько параметров, сколько нужно:

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

Примечание: Используйте _ в названиях параметров.

# Необязательные параметры

Вы можете использоватьзнак вопроса ?, чтобы сделать параметр необязательным. Пример:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

# Параметры с регулярными выражениями

Вы можете использовать метод where, чтобы наложить ограничения на параметр:

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

# Именованные роуты

Присваивая имена роутам вы можете сделать обращение к ним (при генерации URL во вьюхах (views) или переадресациях) более удобным. Вы можете задать имя роуту таким образом:

Route::get('user/profile', ['as' => 'profile', function () {
    //
}]);

# Группы роутов и именованные роуты

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

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

# Генерация URL

Пример редиректа:

$url = Url::route('profile');

$redirect = Response::redirect()->route('profile');

Пример генерации:

Route::get('user/{id}/profile', ['as' => 'profile', function ($id) {
    //
}]);

$url = Url::route('profile', ['id' => 1]);

# Группы роутов

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

Route::group(array('before' => 'auth'), function()
{
    Route::get('/', function()
    {
        // К этому маршруту будет привязан фильтр auth.
    });

    Route::get('user/profile', function()
    {
        // К этому маршруту также будет привязан фильтр auth.
    });
});

# Доменная маршрутизация

В OctoberCMS роуты способны работать и с поддоменами по их маске и передавать в Ваш обработчик параметры из шаблона.

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

# Префикс пути

Группа роутов может быть зарегистрирована с одним префиксом без его явного указания с помощью ключа prefix в параметрах группы. Пример:

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
    });
});

# Ошибки 404

Существует два способа вызвать исключение 404 (Not Found) из маршрута. Первый - методом abort:

App::abort(404);

Второй - бросив исключение класса или потомка класса Symfony\Component\HttpKernel\Exception\NotFoundHttpException.

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