Вывести страницы из базы данных
Выборка данных происходит через методы $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']);
Поддержать автора