Ответ на вопрос 1
$valid_templates = array('signin', 'logout', 'home');
if(isset($_GET['page'])
and in_array($_GET['page'], $valid_templates)) {
$function_name = 'get_' . $_GET['page'] . '_template';
$template = call_user_func($function_name);
}
См. call_user_func()
в руководстве по PHP и функцию in_array()
в руководстве по PHP .
Думаю, также стоит упомянуть, что я бы так не поступил. Сопоставление URL-адресов напрямую с функциями - это негибкий способ ведения дел.
Причина, по которой я добавил массив $valid_templates
, состоит в том, чтобы гарантировать, что пользователь не пытается изменить URL-адрес при попытке вызвать несуществующую функцию и т. Д. Вам необходимо добавить каждую страницу / шаблонную функцию к нему.
Если вам действительно нравится такой способ работы, я бы порекомендовал вам проверить Limonade , так как он использует метод отправки, аналогичный тому, который вы пытаетесь настроить (следующий пример от их официальный сайт ):
require_once 'vendors/limonade.php';
dispatch('/', 'hello');
function hello()
{
return 'Hello world!';
}
run();
Но, на мой взгляд, немного безопаснее и проще в управлении. Плюс вся «тяжелая» сантехническая работа уже выполнена, и вы можете просто сосредоточиться на добавлении своих страниц.
Еще одна похожая опция - Slim , которая выглядит следующим образом:
require 'Slim/Slim.php';
Slim::init();
Slim::get('/hello/:name', function ($name) {
echo "Hello $name";
});
Slim::run();
Пример из их сайта .
Ответ на вопрос 2
Что-то вроде этого в вашем файле .htaccess должно работать для ваших нужд переписывания.
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]