Основы php-маршрутизации

Я ищу учебник или объяснение, как сделать очень простой php-маршрутизацию.

Например, когда я посещаю ссылку вроде: mywebsite.com/users, я хочу запустить метод get класса маршрута для предоставления данных, так же, как это делает laravel.

Route::get('users', function() { return 'Users!'; }); 

Может кто-нибудь объяснить, как это сделать или предоставить мне дополнительную информацию?

Related of "Основы php-маршрутизации"

В своей наиболее общей конфигурации PHP полагается на веб-сервер для выполнения маршрутизации. Это делается путем сопоставления пути запроса к файлу: если вы запрашиваете http://www.example.org/test.php, веб-сервер будет фактически искать файл с именем test.php в предопределенном каталоге.

Есть функция, которая пригодится для нашей цели: многие веб-серверы также позволяют вам звонить по адресу http://www.example.org/test.php/hello, и он все равно будет выполнять test.php. PHP делает дополнительный материал в запрошенном пути доступным через переменную $_SERVER['PATH_INFO'] . В этом случае он будет содержать «/ hello».

Используя это, мы можем построить такой простой маршрутизатор, как это:

 <?php // First, let's define our list of routes. // We could put this in a different file and include it in order to separate // logic and configuration. $routes = array( '/' => 'Welcome! This is the main page.', '/hello' => 'Hello, World!', '/users' => 'Users!' ); // This is our router. function router($routes) { // Iterate through a given list of routes. foreach ($routes as $path => $content) { if ($path == $_SERVER['PATH_INFO']) { // If the path matches, display its contents and stop the router. echo $content; return; } } // This can only be reached if none of the routes matched the path. echo 'Sorry! Page not found'; } // Execute the router with our list of routes. router($routes); ?> 

Для простоты я не делал маршрутизатор классом. Но отсюда тоже не должно быть проблемой.

Предположим, мы назвали этот файл index.php. Теперь мы можем позвонить по адресу http://www.example.org/index.php/hello, чтобы получить «Hello, World!». сообщение. Или http://www.example.org/index.php/, чтобы получить основную страницу.

«Index.php» в этом URL-адресе по-прежнему уродлив, но мы можем исправить это, используя переписывание URL-адресов. В Apache HTTPD вы помещаете файл .htaccess в тот же каталог со следующим содержимым:

 RewriteEngine on RewriteRule ^(.*)$ index.php/$1 

И вот ты! Ваш собственный маршрутизатор с 10 строками логического кода (не считая комментариев и списка маршрутов).

Документация должна помочь – официальные документы http://laravel.com/docs/quick#routing

Отличный видеоролик «Laravel с нуля» здесь – https://laracasts.com/series/laravel-from-scratch (смотрите второй эпизод, который может помочь)

Ну … Есть много рамок в Интернете для php-маршрутизации. Если вы хотите, вы можете попробовать это с https://packagist.org/search/?q=route . Но если честно, если вы из процессуального мира PHP, это может быть проблематично для вас в первый раз.

Если вам нравится, вы можете использовать следующий код, написанный Джесси Бойером, который я использовал для своих собственных проектов. Структура приложения должна следовать:

[Application папка]

  • index.php
  • .htaccess
  • route.php

route.php

 <?php /** * @author Jesse Boyer <contact@jream.com> * @copyright Copyright (C), 2011-12 Jesse Boyer * @license GNU General Public License 3 (http://www.gnu.org/licenses/) * Refer to the LICENSE file distributed within the package. * * @link http://jream.com * * @internal Inspired by Klein @ https://github.com/chriso/klein.php */ class Route { /** * @var array $_listUri List of URI's to match against */ private static $_listUri = array(); /** * @var array $_listCall List of closures to call */ private static $_listCall = array(); /** * @var string $_trim Class-wide items to clean */ private static $_trim = '/\^$'; /** * add - Adds a URI and Function to the two lists * * @param string $uri A path such as about/system * @param object $function An anonymous function */ static public function add($uri, $function) { $uri = trim($uri, self::$_trim); self::$_listUri[] = $uri; self::$_listCall[] = $function; } /** * submit - Looks for a match for the URI and runs the related function */ static public function submit() { $uri = isset($_REQUEST['uri']) ? $_REQUEST['uri'] : '/'; $uri = trim($uri, self::$_trim); $replacementValues = array(); /** * List through the stored URI's */ foreach (self::$_listUri as $listKey => $listUri) { /** * See if there is a match */ if (preg_match("#^$listUri$#", $uri)) { /** * Replace the values */ $realUri = explode('/', $uri); $fakeUri = explode('/', $listUri); /** * Gather the .+ values with the real values in the URI */ foreach ($fakeUri as $key => $value) { if ($value == '.+') { $replacementValues[] = $realUri[$key]; } } /** * Pass an array for arguments */ call_user_func_array(self::$_listCall[$listKey], $replacementValues); } } } } 

.htaccess

здесь, в 2-й строке, вместо '/ php / cfc /' вам нужно указать имя каталога проекта localhost, например 'Application-folder'

 RewriteEngine On RewriteBase /php/cfc/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L] 

index.php

В файле index.php вам необходимо написать следующие коды:

 <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); в <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); в <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); в <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); в <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); в <?php include "route.php"; /** * ----------------------------------------------- * PHP Route Things * ----------------------------------------------- */ //define your route. This is main page route. for example www.example.com Route::add('/', function(){ //define which page you want to display while user hit main page. include('myindex.php'); }); // route for www.example.com/join Route::add('/join', function(){ include('join.php'); }); Route::add('/login', function(){ include('login.php'); }); Route::add('/forget', function(){ include('forget.php'); }); Route::add('/logout', function(){ include('logout.php'); }); //method for execution routes Route::submit(); 

Это прекрасно работает для меня. Надеюсь, это сработает и для вас …

Счастливое кодирование … 🙂