Вывести страницы из базы данных
Выборка данных происходит через методы $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» будет подключен шаблон «src/Template/Posts/view.ctp».
Ссылка на страницу также определяется автоматически по имени метода, например, для метода «view» будет доступна страница «posts/view/2».
Ссылку на страницу можно указать вручную в файле config/routes.php.
# config/routes.php // 1-ый способ $routes->connect( '/post/:id', ['controller' => 'Posts', 'action' => 'view'], ['pass' => array('id')] ); // 2-й способ (с версии CakePHP 3.5) $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-й способ (с версии CakePHP 3.5) $routes->connect('/posts/:id', ['controller' => 'Posts', 'action' => 'view']]) ->setPass(['id']) ->setPatterns(['id' => '\d+']);
Значение «\d» означает, что может быть указано только число. Знак «+» означает, что может быть указано любое количество символов.
Начиная с версии CakePHP 3.6 можно сокращённо указывать код для указанной страницы.
// До версии CakePHP 3.6 $routes->connect('/post/:id', ['controller' => 'Posts', 'action' => 'view']]); // С версии CakePHP 3.6 $routes->connect('/post/:id', 'Posts::view']);