Каков наилучший способ реализовать контроллер в PHP? - PullRequest
0 голосов
/ 17 декабря 2009

В последних двух веб-сайтах, которые я сделал, я реализовал своего рода контроллер в стиле MVC, я думаю.

Я использовал mod_rewrite для отправки всего через index.php, поэтому URL стал строкой запроса.

Это сработало, но мне интересно, немного ли это хакерски, или просто принятый способ ведения дел. Есть ли способ лучше? Я не хочу рамки, я хочу научиться делать это сам.

Ответы [ 5 ]

8 голосов
/ 17 декабря 2009

Попробуйте мои самые маленькие рамки в мире.

<?php
$g=$_GET;$c=@$g['c']?$g['c']:'Home';
if(!@include"c/$c.php")die('fail');
$m=method_exists($c,$m=@$g['m'])?$m:'index';
$o=new$c();$o->$m($g);

Это относится к index.php, а вашими контролами являются Blog.php в ./c/Blog.php.

class Blog {

    function index()
    {
        echo "Hello world";
    }

    function otherpage()
    {
        echo "ZOMG!";
    }

Сделано в основном как шутка, так как я хотел сделать фреймворк, который мог бы вписаться в твит, но основная логика здесь есть;

2 голосов
/ 17 декабря 2009

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

Кроме того, почему бы не проверить некоторые рамки вокруг, чтобы узнать, как они это делают. Это не значит, что вы должны их использовать, просто посмотрите на их код и адаптируйтесь под свою собственную среду.

1 голос
/ 17 декабря 2009

Большинство PHP-фреймворков используют mod_rewrite для достижения той же цели, и это единственный способ подавить index.php и сделать URL-адреса более дружелюбными, сегментированным образом.

Я бы сказал, что вы на правильном пути.

Этот метод, который вы использовали, называется FrontController Pattern , и он также используется этими структурами, чтобы соответствовать шаблону MVC.

Если вам нужно предложение, я бы порекомендовал вам делать каждый запрос проходящим через каждый контроллер страницы, расширяя базовый контроллер, поскольку каждый сайт имеет некоторые базовые структуры данных, которые вам, вероятно, понадобятся на каждой странице, в качестве шаблонов и управления сессиями.

1 голос
/ 17 декабря 2009

Как насчет того, чтобы научиться делать это самостоятельно, но при этом использовать фреймворк? В любом случае, взгляните на среду с открытым исходным кодом, такую ​​как приложения Symfony или CMS, такие как Wordpress, Jommla! и т. д., и вы обнаружите, что все они используют mod_rewrite для отключения.

1 голос
/ 17 декабря 2009

Я так и сделал. Затем я создал новую таблицу отправки, основанную на URL-адресе, который должен создавать экземпляр контроллера и какой запуск выполнять.

...