Сопоставление URI PHP с функциями

Я разрабатываю приложение PHP, которое будет использовать те же принципы, что и система MVC, однако я не хочу использовать классы. То, что я пытаюсь выполнить, - это иметь URL-адрес SEO (mysite.com/product/Some-Cool-Product/123) без необходимости в классах. Вместо этого методы будут использовать функции. Самая большая проблема, с которой я сталкиваюсь, - это сопоставление URI с соответствующими файлами и функциями. Например, mysite.com/members/profile/123 будет указывать на файл «sources/members.php» и затем вызывать функцию «profile». Что вызывает проблему, это добавление возможности использования каталогов для моих исходных файлов. Если бы я хотел использовать URL-адрес, например «mysite.com/forums/threads/view/12345», он указывал бы на «sources/forums/threads.php» и вызывал бы функцию «view» с идентификатором в качестве аргумента.

Может ли кто-нибудь помочь мне с этим? Вот что я до сих пор.

<?php 

$uri = $_SERVER['REQUEST_URI'];

$uri = ltrim($uri, '/');

$uri_segments = explode('/', $uri);

$invalid = 0;

foreach($uri_segments as $key => $val){

    if(!preg_match('^[a-z0-9]^', $val)){

        $invalid = $invalid + 1;

    }

}

if($invalid > 0){

    die('Could not execute the script... the uri contains invalid characters.');

} else {

    //Load the script.

}

?>

0
nl ja de
для классов никогда не бывает необходимости. это то, нравится ли вам самоназвание или боль.
добавлено автор Marshall House, источник
Почему, черт возьми, вы не используете классы? :) Просто из любопытства.
добавлено автор Ignas, источник

2 ответы

Я предполагаю, что вы используете стек LAMP здесь (Linux/Apache/MySQL/PHP).

Если вы используете Apache в качестве веб-сервера, вы можете настроить файл .htaccess в своем общедоступном каталоге с правилом перезаписи, которое автоматически сделает это за вас. Таким образом, когда кто-то ударяет:

http://www.mysite.com/forums/threads/view/12345

Он будет автоматически загружать 'sources/members.php' и передавать идентификатор из URL в качестве параметра get, который будет отображаться в массиве $ _GET.

In the directory where your index (index.html/index.php) file resides create a file named ".htaccess"

Примером вашего файла .htaccess будет:

    RewriteEngine On
    RewriteRule ^forums/threads/view/([0-9]+) sources/members.php?thread_id=$1

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

Here goes an external resource that might help as well: http://corz.org/serv/tricks/htaccess2.php

1
добавлено

Сделайте все запросы, которые не являются файлами, проходят через index.php. Сделайте Router.php - требуйте этого в index.php - проанализируйте запрос в Router.php и включите нужные вам файлы.

В вашем Router.php вам нужно хотя бы знать шаблон, который нужно искать в uri. Попробуйте сопоставить этот шаблон в какой-то форме XML, и все, что не может быть сопоставлено с вашим шаблоном, должно перейти на страницу 404.

Извините, расплывчатый .. но это большой вопрос. кто-то мог бы проработать на нем в течение долгого времени.

0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp