Мое действие представления не показывает никаких данных. CakePhp

StackOverflow https://stackoverflow.com/questions/5866225

  •  28-10-2019
  •  | 
  •  

Вопрос

Это моя ссылка в 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))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top