Мое действие представления не показывает никаких данных. CakePhp
Вопрос
Это моя ссылка в newssses/index.ctp
$this->Html->link(__("Read more >>", TRUE), array('action'=>'view', $newss['Newsse']['title']));
И это мой код представления в newssess_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->read(NULL,$title));
$this->set('newsses', $this->Newsse->find('all'));
}
Но это ничего не показывает, я хочу сделать маршрут, подобный: «Newsses/View/2», чтобы «Newsses/view/title_of_news»
пожалуйста, помогите мне....
Решение
Вы используете Model::read()
метод метода, который принимает в качестве второго аргумента id
из строки в таблице вашей модели, к которой вы хотите получить доступ. Лучше использовать находку в этом случае. Вам не нужно строить новый метод в своей модели или контроллере, вы можете просто отредактировать текущий 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'));
}
Или вы можете сделать более гибридную форму, в которой просмотр по ID все еще возможна, когда приведено числовое название (это предполагает, что у вас никогда не будет предметов новостей, которые имеют заголовок, состоящий только из числовых символов, например, 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);
Другие советы
Для этого вам нужно создать новый метод в вашей модели, который будет отображать результат по названию новостей. В это время вы используете $ this-> newsse-> read (null, $ title)). Вы используете заголовок $ в методе чтения, в то время как этот метод чтения поиск по идентификатору новостей в модели. Таким образом, вам просто нужно создать новый метод в классе модели, такой как readbytitle ($ title) {написать запрос здесь, чтобы получить новости по названию}. И используйте этот метод в своем контроллере. $ this-> newsse-> readbytitle (null, $ title))