имя пользовательского контроллера в CakePHP - PullRequest
0 голосов
/ 19 сентября 2010

Я разрабатываю приложение на cakephp, я должен предоставить страницу пользователя для каждого пользователя на сайте, например www.example.com/username, имя пользователя будет меняться для каждого пользователя, когда посетитель приходит на этот URL, он получает данные пользователя с этим конкретным именем пользователя, но в торт имя пользователя пытается получить контроллер с этим именем, как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 19 сентября 2010

Моим первым ответом было бы сказать «не делай этого». Что произойдет, если вы решите добавить страницу с рекламными акциями в какой-то момент в будущем, но у вас уже есть пользователь с именем "рекламные акции" или вы хотите добавить систему форумов, но у вас уже есть не очень хорошие пользователи с именем " форумы "и" доски объявлений "?

Лучше сделать что-то вроде www.example.com/users/username. (например, www.example.com/users/ssokolow) Так делают все вменяемые сайты. На самом деле, в связанной заметке Mozilla просто перепроектировала систему коллекций аддонов, чтобы имена коллекций располагались под именами пользователей для решения аналогичной проблемы.

В любом случае, независимо от того, что вы решите, инструкции по настройке ваших отображений URL независимо от дизайна вашего контроллера находятся в Разделе 3.4.5: Конфигурация маршрутов в руководстве CakePHP 1.3.

Вы захотите установить порядок приоритета, чтобы CakePHP сначала пробовал все остальное (например, страницу входа в систему и обработчики отправки для форм, принимающих пользовательские данные), а затем пробовал сопоставления имен пользователей как последнее, прежде чем отказаться и возвращая 404.

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

0 голосов
/ 15 мая 2011

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

Лучший способ добиться этого -с маршрутами, но не вручную - маршруты, управляемые базой данных.У Mark Story есть отличная статья на эту тему, и я очень легко и успешно использовал этот подход на очень крупных веб-сайтах:

http://mark -story.com / posts / view / using-custom-route-classes-in-cakephp

Единственное изменение, которое я делаю, заключается в том, что я поддерживаю таблицу под названием «маршруты» и имею соответствующую модель маршрута.Таблица маршрутов просто имеет поля id / name / value.Имя - это хороший URL (в вашем случае «somegreatuser»), а значение - системный URL (например, users / view / 123).

Все, что вам нужно сделать, - это сохранить черный список зарезервированных имен пользователей, которыйэто легко сделать с помощью проверки в модели маршрута.

0 голосов
/ 19 сентября 2010

Вы можете сделать это с помощью маршрутов в качестве прорыва в конце файла маршрутов, но это не рекомендуется - ssokolow объяснил почему.Я использовал нечто очень похожее для CMS, но для страниц, а не для пользователей, система поддерживала уникальность.

Если важно, чтобы URL читался как www.example.com/username, а не www.example.com / users / username, тогда я хотел бы, чтобы apache переписал URL.Это, вероятно, по-прежнему будет вызывать проблемы, если имя пользователя совпадает с именем страницы, и это может сбивать посетителей с толку, не говоря уже о поисковых системах.

Будьте проще - не доставляйте себе головной боли.

...