Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Соглашения об именах

Соглашение — это правило именования. CakePHP по имени контроллера находит таблицу и шаблон, по имени столбца — связь между таблицами. Пока имена соблюдают правила, настраивать ничего не нужно. Это первое, что стоит выучить новичку.

Один пример целиком

Возьмём статьи блога. Всё, что к ним относится, называется так:

ЧтоПравилоИмя
Таблица в базеМножественное число, строчные буквыarticles
Класс таблицыИмя таблицы и TableArticlesTable
Класс записиЕдинственное числоArticle
КонтроллерМножественное число и ControllerArticlesController
Папка шаблоновИмя контроллера без Controllertemplates/Articles/
АдресИмя контроллера строчными/articles

Где лежат файлы

src/Controller/ArticlesController.php
src/Model/Table/ArticlesTable.php
src/Model/Entity/Article.php
templates/Articles/index.php
templates/Articles/view.php

Имя файла всегда совпадает с именем класса. Шаблон называется так же, как метод контроллера: для метода index() — index.php, для view() — view.php.

Имена из нескольких слов

В базе слова разделяют подчёркиванием, в классах пишут каждое слово с заглавной буквы, в адресе — через дефис:

ЧтоИмя
Таблицаarticle_comments
Класс таблицыArticleCommentsTable
Класс записиArticleComment
КонтроллерArticleCommentsController
Адрес/article-comments
Шаблон для метода viewAll()templates/ArticleComments/view_all.php

Столбцы таблицы

СтолбецЧто означает
idПервичный ключ — номер записи
createdДата создания, заполняется сама
modifiedДата изменения, заполняется сама
user_idСсылка на запись таблицы users

Внешний ключ — столбец, хранящий номер записи другой таблицы — называют именем этой таблицы в единственном числе с окончанием _id. Таблицу, связывающую две других, называют обоими именами по алфавиту: articles_tags.

Как это выглядит в коде

// src/Controller/ArticlesController.php
namespace App\Controller;
 
class ArticlesController extends AppController
{
    public function index(): void
    {
        $articles = $this->Articles->find()->all();
 
        $this->set('articles', $articles);
    }
}

Здесь нет ни имени таблицы, ни пути к шаблону. По имени ArticlesController фреймворк понял, что $this->Articles — это таблица articles, а выводить нужно templates/Articles/index.php.

Если имя нельзя изменить

Чужую базу с таблицей blog_posts подключают настройкой в классе таблицы:

// src/Model/Table/ArticlesTable.php
public function initialize(array $config): void
{
    $this->setTable('blog_posts');
}

Соглашения можно обойти, но каждое отступление — лишняя строка кода.

Частая ошибка

Таблица article вместо articles или контроллер ArticleController — и CakePHP сообщает, что таблица не существует или шаблон отсутствует. Ошибка выглядит загадочно, хотя причина в одной букве. Прежде чем искать её в коде, сверьте имена с таблицами этого урока.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.