Просто, быстро и ОЧЕНЬ функционально. minasrouter — это компонент маршрутов PHP для проектов MVC! Он был создан для абстрагирования глаголов RESTfull
(GET, POST, PUT, PATCH, DELETE)
и простого и удобного рендеринга в контроллере приложения.
minasrouter
работает и обрабатывает всю информацию изолированно, упрощая процесс для разработчика и ускоряя разработку/прогресс проекта.
Просто, быстро и ОЧЕНЬ функционально. minasrouter — это компонент маршрутов PHP для проектов MVC! Он предназначен для абстрагирования глаголов RESTfull (GET, POST, PUT, PATCH, DELETE) и простого и легкого их рендеринга в контроллере приложения.
minasrouter работает и обрабатывает всю информацию изолированно, облегчая процесс для разработчика и ускоряя разработку/прогресс проекта.
(Yes, it really is a few minutes)
С двумя линиями вы начинаете использовать маршруты!
Возможно, вы человек, который учится, наблюдая, вы можете получить доступ к папке example, которая содержит пример архитектуры папок того, как мы используем minasrouter .
Вы можете проверить все проведенные тесты здесь. Наслаждаться!
minasrouter доступен через Composer require
:
" require " {
"nicollassilva/ minasrouter " : " ^1.0 "
}
или запустите в терминале :
composer require nicollassilva/ minasrouter
Чтобы начать использовать minasrouter , все управление навигацией должно быть перенаправлено в файл маршрута по умолчанию вашей системы, который выполнит весь процесс обработки маршрута и вернет то, что было настроено по умолчанию. Настройте согласно примерам ниже и в соответствии с вашим сервером.
Чтобы начать использовать minasrouter , все управление навигацией должно быть перенаправлено в файл маршрута по умолчанию вашей системы, который выполнит весь процесс обработки маршрута и вернет то, что было настроено по умолчанию. Настройте согласно примерам ниже и в соответствии с вашим сервером.
RewriteEngine on
Options All -Indexes
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} (www.)?localhost
RewriteRule (.*) https:// %{HTTP_HOST} [L,R=301]
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
RewriteEngine On
# Options All -Indexes
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# URL Rewrite
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]
# ## Do not use the settings below if you are using developing in a local environment, use only in production.
# # WWW Redirect
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# # HTTPS Redirect
# RewriteCond %{HTTP:X-Forwarded-Proto} !https
# RewriteCond %{HTTPS} off
# RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
location / {
if ( $script_filename !~ "-f" ){
rewrite ^(.*)$ /index.php?route=/ $1 break;
}
}
Для запуска компонентов:
<?php
require __DIR__ . " /../vendor/autoload.php " ;
use minasrouter Router Route ;
// The second argument is optional. It separates the Controller and Method from the string
// Example: "Controller@method"
Route:: start ( " http://yourdomain.com " , " @ " );
Route:: get ( " / " , function () {
// ...
});
// ... all routes here
// You will put all your routes before this function
Route:: execute ();
Методы:
Функция | Параметр | Параметр | Параметр |
---|---|---|---|
получать | Строка $uri | $обратный вызов | |
почта | Строка $uri | $обратный вызов | |
помещать | Строка $uri | $обратный вызов | |
пластырь | Строка $uri | $обратный вызов | |
удалить | Строка $uri | $обратный вызов | |
соответствовать | Массив $httpVerbs | Строка $uri | $обратный вызов |
любой | Строка $uri | $обратный вызов |
Пример:
Route:: get ( ' /users ' , [ App Controllers User::class, ' index ' ]);
Route:: post ( ' /users ' , [ App Controllers User::class, ' store ' ]);
Route:: put ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: patch ( ' /users/{id} ' , [ App Controllers User::class, ' update ' ]);
Route:: delete ( ' /users/{id} ' , [ App Controllers User::class, ' delete ' ]);
// The router allows you to register routes that respond to any HTTP verb:
Route:: any ( ' / ' , function () {
// ...
});
// Sometimes you may need to register a route that responds to multiple HTTP verbs:
Route:: match ([ " GET " , " POST " ], " / " , function () {
// ...
});
Методы:
Функция | Параметр |
---|---|
имя | Строка $имя |
к | Строка $имя |
Пример:
Route:: get ( " /users/create " , function () {
// ...
})-> name ( " user.create " );
Route:: get ( " /users/2 " , function () {
// ...
})-> as ( " user.show " );
Route:: get ( " / " , function () {
// ...
})-> name ( " web.index " );
Route:: get ( " /user/{id} " , function ( $ id ) {
echo $ id ;
})-> name ( " user.show " );
Route:: get ( " /post/{id?} " , function ( $ id ) {
if (! $ id ) {
// ...
}
// ...
})-> name ( " post.show " );
Методы:
Функция | Параметр | Параметр |
---|---|---|
где | Массив $params | |
гдеПарам | Строка $параметр | Строка $regex |
гдеЧисло | Строка $параметр | |
гдеАльфа | Строка $параметр | |
гдебуквенно-цифровой | Строка $параметр | |
гдеUuid | Строка $параметр |
Пример:
Route:: get ( " /user/{id} " , [ App Controllers UserController::class, " show " ])
-> name ( " user.show " )
-> where ([ " id " => " [0-9]+ " ]);
// whereParam is alias of where method
Route:: get ( " /profile/{slug} " , [ App Controllers UserController::class, " profile " ])
-> name ( " user.profile " )
-> whereParam ( " id " , " [0-9]+ " );
Route:: get ( " /book/{id} " , [ App Controllers BookController::class, " show " ])
-> name ( " book.show " )
-> whereNumber ( " id " );
Работать с промежуточным программным обеспечением здесь довольно легко, нам просто нужно передать полные имена классов или сделать их глобальными, и оттуда мы будем использовать их псевдонимы.
ПРИМЕЧАНИЕ. Важно разместить все маршруты ниже. Маршруты выше этого класса не будут иметь это промежуточное программное обеспечение как глобальное.
Route:: globalMiddlewares ([
' isLogged ' => App Middlewares isLogged::class,
' isAdmin ' => App Middlewares isAdmin::class
]);
// ... all routes
Вы можете использовать метод промежуточного программного обеспечения для назначения промежуточного программного обеспечения маршруту.
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " isLogged " );
Route:: get ( " /musics " , function () {
// ...
})-> middleware ([ " isLogged " ]);
Вы можете назначить маршруту несколько промежуточных программ, передав массив имен промежуточных программ методу промежуточного программного обеспечения.
Route:: get ( " /musics " , function () {
// ...
})-> middleware ( " first, second " );
Route:: get ( " /movies " , function () {
// ...
})-> middleware ([ " first " , " second " ]);
При назначении промежуточного программного обеспечения вы также можете передать полное имя класса:
use App Middlewares VerifyCsrfToken ;
Route:: get ( " /series " , function () {
// ...
})-> middleware (VerifyCsrfToken::class);
Route:: get ( " /series " , function () {
// ...
})-> middleware ( App Middlewares VerifyCsrfToken::class);
Иногда вы создаете группу маршрутов с промежуточным программным обеспечением, но хотите, чтобы только один или несколько маршрутов были без определенного промежуточного программного обеспечения, вы можете это сделать.
Route:: middleware ([ ' auth ' , ' api ' ])-> group ( function () {
Route:: get ( ' / ' , function () {
// All middlewares will works in this route
});
Route:: get ( ' /no-api ' , function () {
// Only the auth middleware works here
})-> withoutMiddleware ( ' api ' );
});
Все методы:
Функция | Параметр | ::функция | -> функция |
---|---|---|---|
пространство имен | Строка $namespace | Да | Да |
префикс | Строка $префикс | Да | Да |
имя | Строка $имя | Да | Да |
промежуточное программное обеспечение | Строка $промежуточное программное обеспечение | Да | Да |
Групповые методы можно вызывать статическим или обычным способом, не забудьте вызвать группу функций для вставки в качестве маршрутов внутри замыкания.
Примеры:
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " / " , function () {
// admin.index
})-> name ( " index " );
});
Route:: prefix ( " admin/ " )-> group ( function () {
Route:: get ( " /index " , function () {
// http://localhost/admin/index
})-> name ( " index " );
});
Route:: namespace ( " AppControllers " )-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
// AppControllersUser
});
Route:: middleware ( App Middlewares isLogged::class)-> group ( function () {
Route:: get ( " /user/{id} " , [ " User " , " show " ])-> name ( " show " );
});
Route:: namespace ( " AppControllersAdmin " )
-> middleware ([ " isLogged " , " isAdmin " ])
-> name ( " admin. " )
-> prefix ( " admin " )
-> group ( function () {
// ...
});
Вы можете использовать маршруты с отдельными промежуточными программами внутри группы маршрутов.
Route:: namespace ( " isLogged " )-> group ( function () {
Route:: get ( " /posts " , function () {
// ...
})-> middleware ( " isAdmin " );
// ...
});
Возможно, вам нужен маршрут, в котором вы игнорируете имя группы, для этого вы можете использовать второй параметр метода name.
Route:: name ( " admin. " )-> group ( function () {
Route:: get ( " /posts " , function () {
// name: app.posts
})-> name ( " app.posts " , true );
});
Методы:
Функция | Параметр | Параметр | Параметр |
---|---|---|---|
перенаправить | Строка $uri | Строка $перенаправление | Целое $statusCode = 302 |
постоянныйПеренаправление | Строка $uri | Строка $перенаправление |
Пример:
// Returns 302 status code by default.
Route:: redirect ( " /here " , " /there " );
Route:: redirect ( " /here " , " /there " , 301 );
// permanentRedirect always returns 301
Route:: permanentRedirect ( " /here " , " /there " );
// You can return an existing route
Route:: redirect ( " /index " , " web.index " );
Резервный маршрут используется, когда с этим URL-адресом не зарегистрировано ни одного маршрута. Если запрошенный пользователем маршрут отсутствует, будет вызван резервный маршрут.
Route:: fallback ( function () {
echo ' Route error! ' ;
// ...
});
ПРИМЕЧАНИЕ. Будьте осторожны, если вы хотите перенаправить на существующий маршрут: если он содержит динамические аргументы, он вернет все регулярное выражение и вызовет ошибку.
Будьте осторожны при перенаправлении на существующий маршрут, потому что, если он имеет динамические аргументы, он вернет все регулярное выражение и ошибку.
Каждый раз, когда вызывается маршрут и вызывается метод Closure или контроллера, в качестве параметра вы будете иметь экземпляр minasrouter HttpRequest. Если маршрут имеет динамические параметры (обязательные или необязательные), их необходимо передать до получения экземпляра Request.
Функция | Параметр | Параметр |
---|---|---|
getParams | ||
путь | ||
URL | ||
полный URL | ||
заголовок | Строка $заголовок | Строка $default |
имеет заголовок | Строка $заголовок | |
IP | ||
запрос | ?Строка $запрос | ?Строка $default |
все | ?Строка $кроме | |
получить метод | ||
isMethod | Строка $expectedMethod |
Динамические параметры маршрута передаются непосредственно в метод вместе с экземпляром Request.
Пример:
use minasrouter Http Request ;
Route:: get ( " / " , function ( Request $ request )) {
// ...
});
Route:: get ( " /user/{id} " , function ( $ id , Request $ request )) {
// ...
});
Route:: get ( " /posts/{slug?} " , function ( $ slug , Request $ request )) {
// ...
});
Route:: get ( " /book/{slug} " , function ( $ slug , Request $ request ) {
// Retrieving all dynamic parameters
print_r ( $ request -> getParams ());
});
Метод Request — это метод, который содержит все данные формы, параметры запроса, параметры динамического маршрута и весь заголовок запроса.
Метод пути возвращает информацию о пути запроса. Итак, если входящий запрос нацелен на http://localhost/foo/bar , метод пути вернет foo/bar :
$ uri = $ request -> path ();
Чтобы получить полный URL-адрес входящего запроса, вы можете использовать методы url или fullUrl . Метод url вернет URL-адрес без строки запроса, а метод fullUrl включает строку запроса:
$ url = $ request -> url ();
$ urlWithQueryString = $ request -> fullUrl ();
Вы можете получить заголовок запроса из экземпляра minasrouter HttpRequest, используя метод заголовка. Если заголовок в запросе отсутствует, будет возвращено значение null. Однако метод заголовка принимает необязательный второй аргумент, который будет возвращен, если заголовок отсутствует в запросе:
$ value = $ request -> header ( " Header-Name " );
$ value = $ request -> header ( " Header-Name " , " default " );
Метод hasHeader можно использовать, чтобы определить, содержит ли запрос заданный заголовок:
if ( $ request -> hasHeader ( " Header-Name " )) {
// ...
}
Метод BearerToken может использоваться для получения токена носителя из заголовка авторизации. Если такого заголовка нет, будет возвращено значение null.
$ token = $ request -> bearerToken ();
Метод ip можно использовать для получения IP-адреса клиента, отправившего запрос на ваш сайт:
$ ipAddress = $ request -> ip ();
Метод запроса будет получать значения только из строки запроса:
$ id = $ request -> query ( " id " );
Если запрошенные данные значения строки запроса отсутствуют, будет возвращен второй аргумент этого метода:
$ developer = $ request -> query ( " developer " , " Nicollas " );
Вы можете вызвать метод запроса без каких-либо аргументов, чтобы получить все значения строки запроса.
$ query = $ request -> query ();
Вы можете напрямую обращаться к queryString и входным данным, как к свойствам класса Request.
// http://localhost/?foo=bar
$ foo = $ request -> foo ;
// <input type="text" name="title" value=" minasrouter ">
$ title = $ request -> title ;
Вы можете получить все входные данные входящего запроса в виде массива, используя метод all. Этот метод можно использовать независимо от того, поступает ли входящий запрос из формы HTML или является запросом XHR. Если вы хотите обнулить некоторые данные, вы можете передать их в качестве второго параметра.
$ data = $ request -> all ();
// all, except csrf_token, page
$ data = $ request -> all ( " csrf_token, page " );
Метод getMethod вернет HTTP-команду для запроса. Вы можете использовать метод isMethod , чтобы убедиться, что команда HTTP соответствует заданной строке:
$ httpMethod = $ request -> getMethod ();
if ( $ request -> isMethod ( ' POST ' )) {
// ...
}