2009-07-03 4 views
0

Я сейчас в процессе настройки своего сайта, в основном с php. Хотя это мой первый раз, используя его, поэтому я сталкиваюсь с некоторыми проблемами.Php структура сайта

У меня есть основы сайта. Регистрация, вход в систему, страница профиля e.t.c. Однако именно здесь я, похоже, должен принять решение о макете сайта.

Например. В настоящее время страница профиля пользователя имеет URL из

mysite.com/profile.php

В идеале я хотел бы для того, чтобы быть что-то вдоль линий

mysite.com/user/ChrisSalij

От чтения this Среди прочего, я считаю, мне нужен стиль переднего контроллера s но я не уверен в этом и не начинаю с его реализации.

Принимая во внимание, что я довольно новичок в php и т. П., Я был бы признателен за любые полезные комментарии, ссылки и конструктивные критические замечания.

Я вызывающе буду учиться, поэтому ссылки на статьи и объяснения будут отличными. Обычно я занимаюсь исследованиями такого рода. Но я так новичок в этом, что не знаю, с чего начать.

EDIT: Я также должен добавить, что планирую масштабирование этого веб-сайта до большого масштаба. С самого начала это мало, но при выполнении моих целей должно быть достаточно нескольких страниц. Поэтому я готов приложить усилия в настоящее время, чтобы настроить его на долгое время. Спасибо

+0

Эй, ребята, были очень хорошие ответы, в частности Роберт, Марк, Алан и Раффаэль. Если бы у меня было достаточно репутации, я бы проголосовал за вас всех ..... увы, я просто не нужен 15: D Thanks –

ответ

5

Ну, добро пожаловать в мир PHP :)

Прежде всего, фронт-контроллер, как правило, только одна часть более крупной структуры, известной как MVC (Model-View-Controller). Проще говоря, фронт-контроллер может быть хотя бы как «индексная» страница, на которую все люди идут, когда они приходят на ваш сайт. Он обрабатывает инициирование необходимых объектов сайта, а затем вытягивает и запускает то, что необходимо для обработки запроса пользователя (обычно через URL-адрес, как вы указали mysite.com/user/...). Это слишком простое объяснение.

Хотя не обязательно сложно учиться, я бы рекомендовал посмотреть учебник, например this, который объясняет всю идею и базовую реализацию MVC.Они называют фронт-контроллер «маршрутизатором» (это другое дело, существует более одного способа реализовать MVC или его варианты и более одного имени для разных частей). Я не думаю, что это трудно понять или понять. Большинство современных инфраструктур MVC реализуют методы объектно-ориентированного программирования. Для хорошего набора видеороликов на PHP (включая некоторые основные навыки ООП), посмотрите here.

Наконец, если это ваше первое большое использование PHP и вы хотите реализовать что-то вроде MVC, вы можете проверить что-то вроде CakePHP или CodeIgniter. Отличные рамки, которые имеют хорошую документацию и много сделали для вас. Успехов

+0

Большое спасибо. Я в настоящее время с интересом смотрю на codeigniter. Кроме того, что погружение в ряды php заполняет несколько пробелов на моем собственном мышлении php. Его очень ценят. –

+1

Вот еще несколько руководств для CodeIgniter, все из Nettuts Основы CodeIgniter - http://net.tutsplus.com/tutorials/php/codeigniter-basics/ Создайте сайт для хостинга файлов с помощью CodeIgniter - http: // net .tutsplus.com/tutorials/php/create-a-file-hosting-site-with-codeigniter/ Простая разработка с помощью CodeIgniter - http://net.tutsplus.com/videos/screencasts/easy-development-with-codeigniter/ –

0

Вы должны посмотреть на что-то вроде Zend Framework, которая предоставляет вам эту функцию из коробки.

У них отличный путеводитель, который поможет вам в кратчайшие сроки.

http://framework.zend.com/docs/quickstart

+0

dunno who downvoted you, но вы этого не заслужили, так что +1 – mpen

+0

Удивление ... это был вполне верный ответ. Благодаря! –

0

Я согласен с Сева, это также может быть обработано с перезаписью URL. Вы также должны заглянуть в рамки, такие как CakePHP и CodeIgniter, которые делают это автоматически.

5

Предполагая, что вы находитесь на 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, если вам нужны более подробные сведения и примеры кода.

2

Создание "сайта Front Controller стиль" будет означать

  1. Использование mod_rewrite перехватывать все запросы на ваш сайт/приложение

  2. Mapping, что URL на имя PHP класса (ваш контроллер) и метод на этом контроллере (обычно называется действием.

Однако вы сделать не ва nt для непосредственного использования PHP для этого, вы хотите использовать либо PHP/MVC Framework, либо CMS на основе PHP. Например, Joomla, Concrete5, Code Igniter и PHP Cake. Это «решена» проблема.

Все эти рамки уже сделали тяжелую работу (среди прочего), когда/когда URL-адрес преобразуется в класс PHP. Выбрав один из них, вы можете игнорировать повторное внедрение колеса и сосредоточиться на своем основном бизнесе (сайт, который вы строите).

Это не означает, что нет места для нового фреймворка, построенного с нуля или одного, который объединяет модули из какой-либо другой структуры (например, отличный Zend Framework).Однако тот факт, что вы задаете такой базовый вопрос, означает, что вы, вероятно, недостаточно опытны, чтобы быть человеком, который должен его строить (не чувствуйте себя плохо, никто из магически не имеет такого опыта, он приходит только со временем)

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

+0

Я думаю, что у вас есть проблема с вашими ссылками ... :) –

+0

Спасибо Raf, FYI, вы можете редактировать сообщения здесь и исправлять такие вещи, когда видите это. Это хороший способ создать репутацию. –

+0

mmhh ... Я не могу отредактировать ваш комментарий на данный момент. Может быть, мне нужен более высокий показатель репутации для этого. Но спасибо за информацию. –

1

Я не знаю, сколько знаний PHP у вас есть вообще. То, что я могу определенно рекомендовать вам, это загрузить и прочитать книгу PHP 5 Power Programming. Вы можете скачать его бесплатно here. Это занимает много времени, чтобы прочитать его, но это определенно поможет вам. (Вы можете просто читать отдельные главы).

Еще одна вещь, которую я могу вам порекомендовать, - это прочитать Quick Start Guide из Zend Framework. (Сама структура, вероятно, слишком много для вас.) Но в этом руководстве особенно ссылки на все внешние сайты очень хороши. Из этого вы можете узнать много теории.

И что сказали всем остальным: Учитесь у всех установленных фреймворков.

1

Посмотрите на mod_rewrite от Apache. Что-то простое, как код ниже, сделает трюк. Я бы не принял решение об архитектуре, если это может быть случай, когда обучение использованию mod_rewrite решит вашу проблему. Скорее всего, это будет полезно для вас в будущем.

RewriteRule ^user/(.*)/$ profile.php?username=$1 [PT] 

Edit: Паттерн Front Controller не масштабируется. Например, если одна часть вашего приложения более активно используется, чем другие, если вы используете фронт-контроллер, вы не можете масштабировать этот конкретный запрос.

Смежные вопросы