Як перевизначити структуру каталогів Symfony за замовчуванням

Дата оновлення перекладу 2022-11-17

Як перевизначити структуру каталогів Symfony за замовчуванням

Symfony автоматично постачається зі структурою каталогів за замовчуванням, але ви можете з легкістю перевизначити цю стрруктуру каталогів, щоб створити власну:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
your-project/
├─ assets/
├─ bin/
│  └─ console
├─ config/
├─ public/
│  └─ index.php
├─ src/
│  └─ ...
├─ templates/
├─ tests/
├─ translations/
├─ var/
│  ├─ cache/
│  ├─ log/
│  └─ ...
├─ vendor/
└─ .env

Перевизначіть каталог файлів середовища (DotEnv)

За замовчуванням, файл конфігурації .env знаходиться у кореневому каталозі проекту. Якщо ви зберігаєте його в іншому місці, визначіть опцію runtime.dotenv_path у файлі composer.json:

1
2
3
4
5
6
7
8
9
{
    "...": "...",
    "extra": {
        "...": "...",
        "runtime": {
            "dotenv_path": "my/custom/path/to/.env"
        }
    }
}

Потім, оновіть ваші файли Composer (виконавши composer update, наприклад), щоб файли vendor/autoload_runtime.php були повторно згенеровані з новим шляхом .env.

Ви також можете налаштувати різні шляхи .env для ваших викликів консолі та веб-сервера. Відредагуйте файли public/index.php та/або bin/console, щоб визначити новий шлях файлу.

Скрипт консолі:

1
2
3
4
5
6
7
// bin/console

// ...
$_SERVER['APP_RUNTIME_OPTIONS']['dotenv_path'] = 'some/custom/path/to/.env';

require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
// ...

Веб фронт-контролер:

1
2
3
4
5
6
7
// public/index.php

// ...
$_SERVER['APP_RUNTIME_OPTIONS']['dotenv_path'] = 'another/custom/path/to/.env';

require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
// ...

Перевизначіть каталог конфігурації

Каталог конфігурації - єдиний не підлягає перевизначенню у додатку Symfony. Його місце знаходження жорстко закодоване у вигляді каталогу config/ у кореневому каталозі вашого додатку.

Перевизначіть каталог кешу

Ви можете змінити каталог кешу за замовчуванням, перевизначивши метод getCacheDir() у класі Kernel вашого додатку:

1
2
3
4
5
6
7
8
9
10
11
12
// src/Kernel.php

// ...
class Kernel extends BaseKernel
{
    // ...

    public function getCacheDir()
    {
        return dirname(__DIR__).'/var/'.$this->environment.'/cache';
    }
}

У цьому коді, $this->environment - це поточне середовище (тобто, dev). У цьому випадку, ви змінили локацію каталогу кешу на var/{environment}/cache.

Ви також можете змінити каталог кешу, що визначає змінну середовища, під назвою APP_CACHE_DIR, чиє значення є повним шляхом папки кешу.

Caution

Вам варто залишити каталог cache різним для кожного середовища, інакше може статися непередбачувана поведінка додатку. Кожне середовище генерує свої власні кешовані файли конфігурації, тому кожне вимагає власний каталог для зберігання цих кешованих файлів.

Перевизначіть каталог логів

Перевизначення каталогу var/log/ майже таке ж саме, як і перевизначення каталогу var/cache/.

Ви можете зробити це, перевизначивши метод getLogDir() у класі Kernel вашого додатку:

1
2
3
4
5
6
7
8
9
10
11
12
// src/Kernel.php

// ...
class Kernel extends BaseKernel
{
    // ...

    public function getLogDir()
    {
        return dirname(__DIR__).'/var/'.$this->environment.'/log';
    }
}

Тут ви змінили локацію каталогу на var/{environment}/log/.

Ви також можете змінити каталог логів, що визначає змінну середовища, під назвою APP_LOG_DIR, чиє значення є повним шляхом папки логів.

Перевизначіть каталог шаблонів

Якщо ваші шаблони не зберігаються у каталозі за замовчуванням templates/, використайте опцію конфігурації twig.default_path, щоб визначити ваш власний каталог шаблонів (використайте twig.paths для декількох каталогів):

  • YAML
  • XML
  • PHP
1
2
3
4
# config/packages/twig.yaml
twig:
    # ...
    default_path: "%kernel.project_dir%/resources/views"

Перевизначіть каталог перекладів

Якщо ваші файли перекладу не зберігаються у каталозі за замовчуванням translations/, використайте опцію налаштування framework.translator.default_path , щоб визначити ваш власний каталог перекладів (використайте framework.translator.paths для декількох каталогів):

  • YAML
  • XML
  • PHP
1
2
3
4
5
# config/packages/translation.yaml
framework:
    translator:
        # ...
        default_path: "%kernel.project_dir%/i18n"

Перевизначіть публічний каталог

Якщо вам потрібно переіменувати або перемістити ваш каталог public/, то єдине, що вам потрібно гарантувати - щоб шлях до каталогу vendor/ був все ще правильним у вашому фронт-контролері index.php . Якщо ви просто переіменували каталог, то все добре. Але яккщо ви перемістили його кудись, то вам буде потрібно змінити ці шляхи всередині цих файлів:

1
require_once __DIR__.'/../path/to/vendor/autoload.php';

Вам також потрібно змінити опцію extra.public-dir у файлі composer.json:

1
2
3
4
5
6
7
{
    "...": "...",
    "extra": {
        "...": "...",
        "public-dir": "my_new_public_dir"
    }
}

Tip

Деякі спільні хости мають кореневий веб-каталог public_html/. Переіменування вашого веб-каталогу з public/ на public_html/ - це один зі способів змусити ваш проект Symfony працювати на спільному хості. Інший спосіб - розгорнути ваш додаток у каталозі поза вашого веб-кореня, видалите ваш каталог public_html/, а потім замініть його символьним посиланням на public/ у вашому проекті.

Перевизначіть каталог постачальників

Щоб перевизначити каталог vendor/, вам потрібно визначити опцію vendor-dir у вашому файлі composer.json наступним чином:

1
2
3
4
5
6
{
    "config": {
        "bin-dir": "bin",
        "vendor-dir": "/some/dir/vendor"
    }
}

Tip

Ця зміна може знадобитися, якщо ви працюєте у віртуальному середовищі і не можете використати NFS. Наприклад, якщо ви запускаєте додаток Symfony, використовуючи Vagrant/VirtualBox у гостьовій ОС.