Вывести страницы из базы данных

Выборка данных происходит через методы $this->{Model}->find() и $this->{Model}->get().

# src/Controller/PostsController.php

class PostsController extends AppController
{

    // выборка всех записей
    public function index()
    {
        $posts = $this->Posts->find('all');
        $this->set(compact('posts'));
    }

    // выборка одной записи
    public function view($id = null)
    {
        $post = $this->Posts->get($id);
        $this->set(compact('post'));
    }

}

Выборка с уловием происходит через параметр conditions.

$this->Posts->find('all', ['conditions' => ['active' => 1]]);

Вывод страницы

CakePHP автоматически подключает файл шаблона по имени метода. Например, для страницы «view» будет подключен шаблон «templates/Posts/view.php».

Ссылка на страницу также определяется автоматически по имени метода, например, для метода «view» будет доступна страница «posts/view/2».

Ссылку на страницу можно указать вручную в файле config/routes.php.

# config/routes.php

// 1-ый способ
$routes->connect(
    '/post/:id',
    ['controller' => 'Posts', 'action' => 'view'],
    ['pass' => array('id')]
);

// 2-й способ
$routes->connect('/post/:id', ['controller' => 'Posts', 'action' => 'view']])
       ->setPass(['id']);

В коде выше было задано, чтобы вместо «posts/view/2» открывать «post/2». При этом страницы будут доступны по двум адресам, поэтому рекомендуется настроить редирект или задать тег <link rel="canonical">.

Параметр pass позволяет передать переменную $id как параметр метода, например view($id).

Также можно указать, чтобы в «id» можно было указывать только числа через регулярные выражения.

# config/routes.php

// 1-ый способ
$routes->connect(
    '/posts/:id',
    ['controller' => 'Posts', 'action' => 'view'],
    ['pass' => array('id'), 'id' => '\d+']
);

// 2-й способ
$routes->connect('/posts/:id', ['controller' => 'Posts', 'action' => 'view']])
       ->setPass(['id'])
       ->setPatterns(['id' => '\d+']);

Значение «\d» означает, что может быть указано только число. Знак «+» означает, что может быть указано любое количество символов.

Можно также сокращённо указывать код для указанной страницы.

// 1-ый вариант: через параметры
$routes->connect('/post/:id', ['controller' => 'Posts', 'action' => 'view']]);

// 2-ой вариант: сокращённый
$routes->connect('/post/:id', 'Posts::view']);