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

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

Laravel ежедневно используют тысячи разработчиков для создания всевозможных веб-сайтов и приложений. И, хорошо, что есть соглашения об именах, которым они следуют при создании своих переменных, методов и функций в Laravel. Я расскажу вам об этом подробно.

Названия Контроллеров

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

Кроме того, каждое слово должно быть написано с большой буквы (т.е. BlogController, а не blogcontroller).

Например: BlogController, AuthController, UserController.

Плохие примеры: UsersController (множественное число), Users (отсутствует суффикс «Controller»).

Названия таблиц БД

Таблицы должны быть в нижнем регистре, с подчеркиванием для разделения слов (snake_case) и во множественном числе.

Например: posts, project_tasks, uploaded_images.

Плохие примеры: all_posts, Posts, post, blogPosts

Сводные таблицы

Все сводные таблицы должны быть в нижнем регистре, каждая модель в алфавитном порядке, разделенные подчеркиванием (snake_case).

Например: post_user, task_user и т.д.

Плохие примеры: users_posts, UsersPosts.

Названия столбцов таблицы

Имена столбцов должны быть в нижнем регистре, и в snake_case (подчеркивание между словами). Вы не должны ссылаться на имя таблицы.

Например: post_body, id, created_at.

Плохие примеры: blog_post_created_at, forum_thread_title, threadTitle.

Первичный Ключ (Primary Key)

Обычно это должен быть id.

Внешние ключи (Foreign Keys)

Внешними ключами должно быть имя модели (в единственном числе), к которому добавляется ‘_id’ (при условии, что первичный ключ в другой таблице это ‘id’).

Например: comment_id, user_id.

Переменные

Обычные переменные обычно должны быть в «верблюжьемРегистре» (camelCase) с первым символом в нижнем регистре.

Например: $users = …, $bannedUsers = …

Плохие примеры: $all_banned_users = … , $Users=…

Если переменная содержит массив или коллекцию из нескольких элементов, то имя переменной должно быть во множественном числе. В противном случае оно должно быть в единственном числе.

Например: $users = User::all(); (поскольку это будет коллекция из нескольких объектов User) и $user = User::first() (так как это всего лишь один объект)

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

Названия моделей в Laravel

Модель должна быть в единственном числе, без пробелов между словами и с заглавной буквы.

Например: User (\App\User или \App\Models\User и т.д.), ForumThread, Comment.

Плохие примеры: Users, ForumPosts, blogpost, blog_post, Blog_posts.

Как правило, ваши модели должны иметь возможность автоматически определять, какую таблицу БД им следует использовать следующим методом:

/**
 * Get the table associated with the model.
 *
 * @return string
 */
public function getTable()
{
    if (! isset($this->table)) {
        return str_replace(
            '\\', '', Str::snake(Str::plural(class_basename($this)))
        );
    }

    return $this->table;
}

Но, конечно, вы можете просто указать $this->table в вашей модели. См. ниже раздел о названиях таблиц.

Я рекомендую вам создавать модели и миграции одновременно, запуская

php artisan make:model -m ForumPost

Это автоматически сгенерирует файл миграции (в данном случае для таблицы «forum_posts»).

Свойства модели

Должны быть строчные буквы, в snake_case. Они также должны следовать тем же соглашениям, что и имена столбцов таблицы.

Например: $this->updated_at, $this->title.

Плохие примеры: $this->UpdatedAt, $this->blogTitle.

Методы Модели

Методы в ваших моделях, как и все остальные методы в ваших проектах на Laravel, должны быть в camelCase, первый символ должен быть в нижнем регистре.

Например: public function get(), public function getAll().

Плохие примеры: public function GetPosts(), public function get_posts().

Отношения

Отношения hasOne or belongsTo (один ко многим)

Они должны иметь форму единственного числа и следовать тем же соглашениям об именах, что и у методов обычной модели (camelCase, с первой буквой в нижнем регистре).

Например: public function postAuthor(), public function phone().

Отношения hasMany, belongsToMany, hasManyThrough (один ко многим)

Должны быть такими же, как и другие Один ко многим, но во множественном числе.

Например: public function comments(), public function roles().

Полиморфные отношения

Возможно, получить правильное название будет несколько неудобно.

В идеале вы хотите иметь такой метод:

public function category()
{
    return $this->morphMany('App\Category', 'categoryable');
}

И Laravel по дефолту будет предполагать, что есть categoryable_id и categoryable_type.

Но вы можете использовать другие необязательные параметры для morphMany, чтобы поменять дефолтные значения

public function morphMany($related, $name, $type = null, $id = null, $localKey = null)

Контроллеры

Методы в контроллерах

Они должны следовать тем же правилам, что и методы модели. Т.е. camelCase (первая строчная буква).

Кроме того, для обычных операций CRUD они должны использовать одно из следующих названий методов.

МЕТОД ССЫЛКА НАЗВАНИЕ МЕТОДА НАЗВАНИЕ МАРШРУТА
GET /photos index() photos.index
GET /photos/create create() photos.create
POST /photos store() photos.store
GET /photos/{photo} show() photos.show
GET /photos/{photo}/edit edit() photos.edit
PUT/PATCH /photos/{photo} update() photos.update
DELETE /photos/{photo} destroy() photos.destroy

Трейты (Traits)

Должны быть прилагательными.

Например: Notifiable, Dispatchable и т.д.

Шаблоны Blade

Должны быть в нижнем регистре, snake_case (подчеркивание между словами).

Например: all.blade.php , all_posts.blade.php и т.д.

Автор: webdevetc
Перевод: Алексей Широков

Оригинал «Соглашения об именах в Laravel» от Алексея Мезенина

Наш Телеграм-канал — следите за новостями о Laravel.