Многие фреймворки используют URL-соглашения, такие как /controller/action/{id}
, что замечательно, но если вам нужна какая-либо конфигурация, кроме вас, вы сами можете написать свои собственные маршруты.
Как бы вы справились с URL-адресами вроде /users/{id}/friends
на сервере? (для просмотра списка всех друзей пользователя)
Я думаю, что в контроллере что-то вроде этого будет уместно:
class User {
function index() {
echo 'user index';
}
}
class Friend extends User {
function index($user_id) {
echo 'friend index';
}
}
Тогда у вас будет следующая карта:
/users -> User::index()
/users/{id} -> User::view($id)
/users/{id}/friends -> Friend::index($user_id)
Я хотел поместить класс Friend в класс User, но, очевидно, вы не можете сделать это в PHP, так что это лучшее, что я могу придумать. Мысли? * * 1013
Какой URL будет использоваться для редактирования вашего списка друзей? /users/{id}/friends/edit
может сработать, но это не кажется подходящим, так как вы никогда не должны редактировать чужой список друзей. /account/friends/edit
будет лучшим выбором? Где бы вы положили соответствующий код для этого? В контроллере друга, или в контроллере пользователя, или в специализированном контроллере учетных записей?
Бонусный вопрос: что вы предпочитаете? /photos/delete/{id}
или /photos/{id}/delete
Ответы:
Итак, что я понял из ответов, так это то, что если «вещь» сложная (например, «друзья»), но не имеет своего собственного контроллера, вы можете дать ему один без модели, или если это не так Вы должны заполнить это тем, с чем это наиболее тесно связано. Ваши URL не должны влиять на то, где вы размещаете свой код. Большинство людей, кажется, думают, что вы должны придерживаться /controller/action/{id}
, насколько это возможно, потому что это то, с чем люди знакомы.
Никто действительно не прокомментировал расширенный класс, кроме как сказать, что это "неловко". Возможно, FriendList был бы более подходящим классом в этом случае, если бы я действительно хотел выделить его.
Спасибо за все ответы:)