В настоящее время я занимаюсь настройкой своего сайта, в основном с php. Хотя это мой первый раз, используя его, поэтому я сталкиваюсь с некоторыми проблемами.
У меня есть основы сайта. Регистрация, вход в систему, страница профиля и т. Д. Однако мне кажется, что я должен принять решение о макете сайта.
Например. В настоящее время страница профиля пользователя имеет URL-адрес
mysite.com/profile.php
В идеале, я бы хотел, чтобы это было чем-то вроде
mysite.com/user/ChrisSalij
От чтения этого, помимо всего прочего, я считаю, что мне нужен сайт стиля Front Controller, хотя я не уверен в этом и не начинаю с его реализации.
Принимая во внимание, что я довольно новичок в php и т. П., Я был бы признателен за любые полезные комментарии, ссылки и конструктивную критику.
Я вызывающе буду учиться, поэтому ссылки на статьи и объяснения будут отличными. Обычно я занимаюсь исследованиями такого рода. Но я так новичок в этом, что не знаю, с чего начать.
EDIT: Я также должен добавить, что планирую масштабирование этого веб-сайта до больших масштабов. С самого начала это мало, но при выполнении моих целей должно быть достаточно нескольких страниц. Поэтому я готов приложить усилия в настоящее время, чтобы настроить его на долгое время. благодаря
Ну, добро пожаловать в мир PHP 🙂
Прежде всего, фронтальный контроллер обычно представляет собой только 1 часть более крупной структуры, известной как MVC (Model-View-Controller). Проще говоря, фронт-контроллер может быть хотя бы как «индексная» страница, на которую все люди идут, когда они приходят на ваш сайт. Он обрабатывает инициирование необходимых объектов сайта, а затем вытягивает и запускает то, что необходимо для обработки запроса пользователя (обычно через URL-адрес, как вы указали mysite.com/user / …). Это слишком простое объяснение.
Хотя не обязательно трудно учиться, я бы рекомендовал посмотреть на такой учебник, который объясняет всю идею и базовую реализацию MVC. Они называют фронт-контроллер «маршрутизатором» (это другое дело, существует более одного способа реализовать MVC или его варианты и более одного имени для разных частей). Я не думаю, что это трудно понять или понять. Большинство современных инфраструктур MVC реализуют методы объектно-ориентированного программирования. Для хорошего набора видеороликов на PHP (включая некоторые базовые навыки ООП), посмотрите здесь .
Наконец, если это ваше первое большое использование PHP и вы хотите реализовать что-то вроде MVC, вы можете проверить что-то вроде CakePHP или CodeIgniter . Отличные рамки, которые имеют хорошую документацию и много сделали для вас. Удачи
Предполагая, что вы используете apache, вы можете создать файл с именем .htaccess в корневом каталоге вашего сайта и добавить эти строки
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* /index.php?url=$0 [L,QSA]
Это передаст все запросы страницы index.php. В index.php вы хотите разобрать $_GET['url']
и загрузить соответствующую страницу с помощью include
. Вам придется санировать вход и следить за тем, чтобы люди не включали то, что им не нужно. Вы можете получить части с чем-то вроде:
list($controller, $username) = explode('/', $_GET['url']);
Типичная структура MVC будет использовать controller/action/id
. Если «действие» опущено, хотя, как и в вашем примере, я бы сделал его по умолчанию «view». Как в профиле пользователя «view». Идентификатором будет имя пользователя. Как правило, каждый контроллер является классом, и каждое действие является функцией в этом классе, любые параметры после этого передаются в функцию. Также есть связанный файл с каждым действием.
Очень много кода, чтобы дать вам полный пример (я просто закодировал структуру MVC!), Но это должно дать вам основы для начала работы.
Определенно проверьте некоторые другие структуры, такие как CakePHP, Kohana / CodeIgniter, если вам нужны дополнительные сведения и примеры кода.
Создание «сайта стиля Front Controller» означает
Использование mod_rewrite для перехвата всех запросов на ваш сайт / приложение
Сопоставление этого URL-адреса с именем класса PHP (ваш контроллер) и метод на этом контроллере (обычно называемый действием.
Однако вы не хотите напрямую использовать PHP для этого, вы хотите использовать либо PHP / MVC Framework, либо CMS на основе PHP. Например, Joomla , Concrete5 , Code Igniter и PHP Cake . Это «решена» проблема.
Все эти структуры уже сделали тяжелую работу (среди прочего), определяя, когда / как URL-адрес преобразуется в класс PHP. Выбрав один из них, вы можете игнорировать повторное внедрение колеса и сосредоточиться на своем основном бизнесе (сайт, который вы строите).
Это не означает, что нет места для новой структуры, построенной с нуля или той, которая объединяет модули из какой-либо другой структуры (например, отличную Zend Framework ). Однако тот факт, что вы задаете такой базовый вопрос, означает, что вы, вероятно, недостаточно опытны, чтобы быть человеком, который должен его строить (не чувствуйте себя плохо, никто из магически не имеет такого опыта, он приходит только со временем )
Получите некоторый опыт под вашим поясом с существующими инфраструктурами, посмотрите, как они построены, и получите представление о том, как вы их используете. Затем «позже», как только у вас будет множество реальных жизненных ситуаций под вашим поясом, если вы все еще чувствуете потребность в создании своей собственной структуры, вы будете в лучшем положении для решения проблемы.
Взгляните на URL Rewriting или mod_rewrite от Apache.
Я не знаю, сколько знаний PHP у вас есть в целом. То, что я могу определенно рекомендовать вам, это загрузить и прочитать книгу PHP 5 Power Programming. Вы можете скачать его бесплатно здесь . Это занимает много времени, чтобы прочитать его, но это определенно поможет вам. (Вы можете просто читать отдельные главы).
Еще одна вещь, которую я могу вам порекомендовать, – прочитать Руководство по быстрому запуску из Zend Framework. (Сама среда, вероятно, слишком много для вас.) Но в этом руководстве особенно ссылки на все внешние сайты очень хорошие. Из этого вы можете узнать много теории.
И что сказали все остальные: Учитесь со всех установленных рамок.
Посмотрите на mod_rewrite от Apache. Что-то простое, как код ниже, сделает трюк. Я бы не принял решение об архитектуре, если это может быть случай, когда обучение использованию mod_rewrite решит вашу проблему. Скорее всего, это будет полезно для вас в будущем.
RewriteRule ^user/(.*)/$ profile.php?username=$1 [PT]
Изменить: шаблон Front Controller не масштабируется. Например, если одна часть вашего приложения более активно используется, чем другие, если вы используете фронт-контроллер, вы не можете масштабировать этот конкретный запрос.
Вы должны посмотреть на что-то вроде Zend Framework, которая предоставляет вам эту функцию из коробки.
У них есть отличный путеводитель, который поможет вам в кратчайшие сроки.
Я согласен с Sev, это также можно обработать с помощью перезаписи URL. Вы также должны заглянуть в рамки, такие как CakePHP и CodeIgniter, которые делают это автоматически.