2013-12-11 4 views
0

мне нужна помощь в блоге учебник CakePHP 2.0 в части PostsController

http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html

Я не могу понять, где $id пришли в параметре определяется а $id = null так мое понимание является $id должно быть пустым, но это не пустой

public function view($id = null) { 
    if (!$id) { 
     throw new NotFoundException(__('Invalid post')); 
    } 

    $post = $this->Post->findById($id); 
    if (!$post) { 
     throw new NotFoundException(__('Invalid post')); 
    } 
    $this->set('post', $post); 
} 

Я знаю, что реальная стоимость $id пришли из URL, в этом случае cakephp/posts/view/$id, но я хочу знать, как это $id из URL получил через PostsController

ответ

2

Диспетчер принимает параметры из URL и передает их в качестве аргументов своих действий контроллера, так что вы можете сделать что-то с ними, то есть искать сообщение в блоге через идентификатор, указанный в URL-адресе.

Значение по умолчанию null в случае, если вы запрашиваете URL, как http://example.com/posts/view/. Вы не указали идентификатор, так что бы значение null и вы можете бросить ошибку 404 в своем действии контроллера:

<?php 
class PostsController extends AppController { 

    public function view($id = null) { 
     if (is_null($id)) { 
      throw new NotFoundException(); 
     } 

     $post = $this->Post->findById($id); 

     $this->set('post', $post); 
    } 
} 
+0

Просто хотел бы добавить, что лучше либо делать, если заявление после того, как ваш ' $ post = $ this-> Post-> findByid ($ id); 'и проверить' if (empty ($ post)) 'или изменить' is_null ($ id) 'to'! $ this-> Post-> существует ($ ID) '. У вас может быть неверный идентификатор, который является недопустимым сообщением, требующим «NotFoundException» – iso27002

+0

Действительно. Обычно я использую метод 'if (! $ This-> ModelName-> exists ($ id)) в моих собственных приложениях CakePHP. В качестве примера вышесказанное было просто написано с манжетой. –

Смежные вопросы