мое действие просмотра не показывает никаких данных. CakePHP - PullRequest
0 голосов
/ 03 мая 2011

Это моя ссылка в newsses / index.ctp

$this->Html->link(__("Read more >>", TRUE), array('action'=>'view', $newss['Newsse']['title']));

и код моего просмотра в 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->read(NULL,$title));
    $this->set('newsses', $this->Newsse->find('all'));
}

, но ничего не отображается, я хочусделать маршрут как: "newsses / view / 2" в "newsses / view / title_of_news"

пожалуйста, помогите мне ....

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Вы используете метод метода 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);
0 голосов
/ 03 мая 2011

Для этого вам нужно создать новый метод в вашей модели, который будет отображать результат по заголовку новости. В данный момент вы используете $ this-> Newsse-> read (NULL, $ title)). Вы используете $ title в методе чтения, в то время как этот метод чтения выполняет поиск по идентификатору новости в модели. Поэтому вам просто нужно создать новый метод в классе модели, такой как readByTitle ($ title) {написать запрос здесь, чтобы получить новости по заголовку} И используйте этот метод в вашем контроллере. $ This-> Newsse-> readByTitle (NULL, $ название))

...