14/04/2018 - SYMFONY, NGINX
Symfony4 uygulamaları varsayılan olarak uygulama değişkenleri için .env
dosyasını kullanırlar. Bu örneğimizde dinamik olarak uygulamamıza tarayıcıdan ve terminalden ulaştığımızda .env.test
dosyasını kullanacağız. Bu işlem için aşağıdaki adımları atmamız gerekecek.
Bu dosya composer require doctrine
komutu çalıştırıldığı zaman otomatik olarak yaratılır.
parameters:
env(DATABASE_URL): ''
doctrine:
dbal:
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
Bu dosyayı yaratın. Versiyon için $ sqlite3 --version
komutunu çalıştırabilirsiniz.
doctrine:
dbal:
driver: 'pdo_sqlite'
server_version: '3.11.0'
Aşağıdaki eki $kernel = new Kernel($env, $debug);
satırının tam uzerine yerleştirin.
if ($env === 'test') {
(new Dotenv())->load(__DIR__.'/../.env.test');
}
Öncelikle public/index.php
dosyasının içeriğini kopyalayıp bu dosyayı aşağıdaki değişikliklerle birlikte yaratın.
# Replace
$env = $_SERVER['APP_ENV'] ?? 'dev';
# with
$env = 'test';
# Add line below right above $kernel = new Kernel($env, $debug);
(new Dotenv())->load(__DIR__.'/../.env.test');
Bu dosya zaten mevcut ve sadece dev
ortamı için kullanılır.
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=d7f88292186a64eeef558337bb2f0f43
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
DATABASE_URL=mysql://root:root@127.0.0.1:3306/symfony
###< doctrine/doctrine-bundle ###
Bu dosyayı yaratın.
###> symfony/framework-bundle ###
APP_ENV=test
APP_SECRET=d7f88292186a64eeef558337bb2f0f43
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
DATABASE_URL=sqlite:///%kernel.project_dir%/var/cache/test/database.db
###< doctrine/doctrine-bundle ###
server {
listen 80;
server_name symfony-4-0-skeleton.dev;
root /srv/www/symfony/4-0-skeleton/public;
location / {
try_files $uri /index.php$is_args$args;
}
# REMOVE THIS WHOLE BLOCK IN PRODUCTION
location ~ ^/index_test\.php(/|$) {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/symfony_4_0_skeleton_error.log;
access_log /var/log/nginx/symfony_4_0_skeleton_access.log;
}
Eğer tarayıcınızdan http://192.168.99.30
adresine giderseniz, uygulamanız .env
dosyasından MySQL veritabanını kullanacaktır. Eğer http://192.168.99.30/index_test.php
adresine giderseniz, uygulamanız .env.test
dosyasından SQLite veritananını kullanacaktır. Aynı durum terminal komutlarına ... -env=test
ekini eklediğiniz zamanda geçerli olacaktır.