Вы используете метод метода Model::read()
, который принимает в качестве второго аргумента id
строки в таблице вашей модели, к которой вы хотите получить доступ. В этом случае лучше использовать find. Вам не нужно создавать новый метод в вашей модели или контроллере, вы можете просто отредактировать текущий метод view
.
# in newsses_controller.php:
function view($title = null) {
$this->set('title_for_layout', __('News & Event', true));
if (!$id) {
$this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error'));
$this->redirect(array('action'=>'index'));
}
$this->set('newsse', $this->Newsse->find('first', array(
'conditions' => array('Newsse.title' => $title)
));
$this->set('newsses', $this->Newsse->find('all'));
}
Или вы можете создать более гибридную форму, в которой просмотр по идентификатору все еще возможен, когда дается числовой заголовок (предполагается, что у вас никогда не будет новостных элементов, заголовок которых состоит только из числовых символов, например, «12345»).
# in newsses_controller.php:
function view($title = null) {
$this->set('title_for_layout', __('News & Event', true));
if (!$id) {
$this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error'));
$this->redirect(array('action'=>'index'));
} else if (is_numeric($title)) {
$this->set('newsse', $this->Newsse->read(NULL, $title));
} else {
$this->set('newsse', $this->Newsse->find('first', array(
'conditions' => array('Newsse.title' => $title)
));
}
$this->set('newsses', $this->Newsse->find('all'));
}
Наконец, вы также можете заменить метод find
в моем примере на (более короткий) пользовательский метод findBy
(дополнительную информацию об этом см. В документации ).
$this->Newsse->findByTitle($title);