Я создаю систему дружбы в CakePHP, которая использует две таблицы: Users и Friends.
Для пользователей (идентификатор, имя пользователя, адрес электронной почты, пароль) и друзей (идентификатор, user_from, user_to, status)
Пользователь просит другого пользователя стать друзьями, и это создает запись в таблице друзей, в которой хранятся оба идентификатора пользователя и устанавливается статус «Запрошено». Пользователь может принять дружбу и статус меняется на «Принят» или отменить дружбу, и запись будет удалена из базы данных.
Пример ссылки на запрос выглядит и может отображаться либо в списке пользователей, либо на странице сведений о пользователе:
<?php echo $this->Html->link('Add as Friend', array('controller'=>'friends','action'=>'add_friend',$user['User']['id'])); ?>
Вопрос 1 , как я могу изменить эту ссылку на ссылку запроса на отмену, если у пользователя есть запрос на него или он уже дружит?
Эта ссылка соответствует следующему методу в контроллере:
function add_friend ( $id )
{
if(!empty($this->data))
{
$this->Friend->Create();
if($this->Friend->save($this->data))
{
$this->Session->setFlash('Friendship Requested');
$this->redirect(array('controller'=>'users','action'=>'login'));
}
}
}
Таким образом, мы передаем идентификатор методу, который будет user_to
, а затем «user_from» должен быть зарегистрированным в данный момент пользователем и установить статус «Запрошенный». Вопрос 2 как мне это сделать? Также, как я могу запретить пользователю создавать несколько записей, просто вызвав этот метод и отобразив сообщение о том, что вы уже запросили дружбу.
Следующий метод:
function accept_friendship ( $id )
{
$this->Session->setFlash('Friendship Accepted');
$this->redirect(array('controller'=>'friends','action'=>'index'));
}
}
}
Вопрос 3: Но я опять запутался в том, как изменить статус записи и пометить пользователей как друзей при вызове метода. Также необходимо предотвратить повторный вызов этой функции для одной и той же записи.
Последний бит - список друзей для пользователя или другого пользователя:
function users_friends( $id )
{
$this->set('friends', $this->Friend->find('all'));
}
function my_friends()
{
$this->set('friends', $this->Friend->find('all'));
}
Как вы можете видеть, первый метод требует идентификатор пользователя, которого вы просматриваете, а затем второй метод будет использовать текущий вошедший в систему идентификатор пользователя. Вопрос 4: Как я могу использовать это, чтобы перечислить друзей этого пользователя?
Если кто-то может помочь мне встать на правильный путь, это будет очень ценно, так как я остановился и не уверен, как сделать эти 4 вещи, и попытаться изучить CakePHP как можно лучше, так что я могу помочь, очень признателен. Спасибо
РЕДАКТИРОВАТЬ: мне пришло в голову, что представление со скрытыми полями может быть использовано для хранения информации о запросе на добавление в друзья, которую подтверждает пользователь, но это не идеально, так как это означает отправку пользователя в другое место, когда на самом деле я хочу просто запустить функцию и сразу же выполнить перенаправление. НЕ АЯКС МЫШЬ!