پیکربندی
تمام تنظیمات فینچ در یک نمونه FinchConfigs قرار دارد که یکبار ساخته شده و به FinchApp ارسال میشود. این صفحه تمام گزینهها و معادل متغیر محیطی آنها را مستند میکند.
ساختار پروژه
یک پروژه فینچ معمولی به این شکل است:
.
├── lib/
│ ├── app.dart # تنظیم FinchApp و main()
│ ├── configs/
│ │ └── setting.dart # ثابتهای سطح app (اختیاری)
│ ├── controllers/
│ ├── models/
│ ├── db/
│ ├── route/
│ │ ├── web_route.dart
│ │ └── socket_route.dart
│ ├── languages/ # فایلهای JSON زبان (en.json, fa.json …)
│ └── widgets/ # فایلهای قالب Jinja (*.j2.html)
├── public/ # فایلهای استاتیک با سرویس مستقیم
├── migrations/ # فایلهای SQL مهاجرت MySQL
├── migrations_sqlite/ # فایلهای SQL مهاجرت SQLite
├── .env
└── pubspec.yaml
FinchConfigs
FinchConfigs کلاس مرکزی پیکربندی است. تمام پارامترهای سازنده معادل .env دارند.
import 'package:finch/finch_app.dart';
import 'package:finch/finch_tools.dart'; // pathTo(), env
FinchConfigs configs = FinchConfigs(
// --- سرور ---
port: (env['DOMAIN_PORT'] ?? '8080').toInt(def: 8080),
ip: '0.0.0.0',
domain: env['DOMAIN'] ?? 'localhost',
domainScheme: env['DOMAIN_SCHEME'] ?? 'http',
// --- مسیرها ---
publicDir: pathTo(env['PUBLIC_DIR'] ?? './public'),
widgetsPath: pathTo(env['WIDGETS_PATH'] ?? './lib/widgets'),
widgetsType: env['WIDGETS_TYPE'] ?? 'j2.html',
languagePath: pathTo(env['LANGUAGE_PATH'] ?? './lib/languages'),
pathCache: pathTo(env['PATH_CACHE'] ?? './cache_routes'),
pathMigrationMySQL: './migrations',
pathMigrationSQLite: './migrations_sqlite',
// --- زبان ---
languageSource: LanguageSource.json, // یا LanguageSource.dart
// dartLanguages: languageDart, // هنگام استفاده از languageSource == dart
// --- دیتابیسها ---
dbConfig: FinchDBConfig(
enable: true,
host: env['MONGODB_CONNECTION'] ?? 'localhost',
port: env['MONGODB_PORT'] ?? '27017',
user: env['MONGODB_USER'] ?? 'root',
pass: env['MONGODB_PASSWORD'] ?? 'password',
dbName: env['MONGODB_NAME'] ?? 'my_app',
auth: env['MONGODB_AUTH'] ?? 'admin',
),
mysqlConfig: FinchMysqlConfig(
enable: true,
host: env['MYSQL_HOST'] ?? 'localhost',
port: (env['MYSQL_PORT'] ?? '3306').toInt(def: 3306),
user: env['MYSQL_USER'] ?? 'db_user',
pass: env['MYSQL_PASS'] ?? 'db_password',
databaseName: env['MYSQL_DATABASE'] ?? 'my_db',
),
sqliteConfig: FinchSqliteConfig(
enable: true,
filePath: env['SQLITE_PATH'] ?? './app.sqlite',
),
// --- ایمیل ---
mailDefault: '[email protected]',
mailHost: 'smtp.example.com',
// --- موتور قالب (Jinja) ---
blockStart: '{%',
blockEnd: '%}',
variableStart: '{{',
variableEnd: '}}',
commentStart: '{#',
commentEnd: '#}',
// jinjaMapTemplate: mapTemplates,
// --- امنیت ---
cookiePassword: env['COOKIE_PASSWORD'] ?? 'change-me-in-production',
// --- توسعه ---
enableLocalDebugger: (env['ENABLE_LOCAL_DEBUGGER'] ?? false).toString().toBool,
);
مرجع ویژگیهای کلیدی
| ویژگی | نوع | پیشفرض | هدف |
|---|---|---|---|
port |
int |
8080 |
پورت سرور HTTP |
ip |
String |
'0.0.0.0' |
آدرس bind |
domain |
String |
'localhost' |
دامنه عمومی |
domainScheme |
String |
'http' |
http یا https |
domainPort |
int |
همان port |
پورت در URLهای تولیدشده |
publicDir |
String |
'public' |
ریشه فایلهای استاتیک |
widgetsPath |
String |
'bin/widgets' |
دایرکتوری قالب |
widgetsType |
String |
'html' |
پسوند فایل قالب |
languagePath |
String |
'languages' |
دایرکتوری فایلهای JSON زبان |
languageSource |
LanguageSource |
.json |
.json یا .dart |
pathCache |
String |
'./cache' |
دایرکتوری کش پاسخ مسیر |
pathMigrationMySQL |
String |
'./migrations' |
دایرکتوری مهاجرت MySQL |
pathMigrationSQLite |
String |
'./migrations_sqlite' |
دایرکتوری مهاجرت SQLite |
cookiePassword |
String |
'password' |
کلید برای رمزگذاری کوکی |
enableLocalDebugger |
bool |
false |
فعالسازی نوار debug در مرورگر |
fakeDelay |
int |
0 |
افزودن تأخیر مصنوعی به پاسخ (ms) |
poweredBy |
String |
'Dart Finch' |
مقدار هدر X-Powered-By |
noStop |
bool |
true |
نگهداشتن سرور پس از خطای مدیریتنشده |
کلاسهای پیکربندی دیتابیس
FinchDBConfig (MongoDB)
FinchDBConfig(
enable: true,
host: 'localhost',
port: '27017', // String
user: 'root',
pass: 'password',
dbName: 'my_app',
auth: 'admin', // دیتابیس منبع احراز هویت
)
FinchMysqlConfig
FinchMysqlConfig(
enable: true,
host: 'localhost',
port: 3306, // int
user: 'db_user',
pass: 'db_password',
databaseName: 'my_db',
collation: 'utf8mb4_general_ci',
)
FinchSqliteConfig
FinchSqliteConfig(
enable: true,
filePath: './app.sqlite',
)
متغیرهای محیطی (.env)
فینچ به صورت خودکار فایل .env در ریشه پروژه را میخواند. تمام مقادیر FinchConfigs را میتوان از طریق متغیرهای محیطی بازنویسی کرد. نقشه env (از finch_tools.dart) هر دو متغیر .env و سیستم را ارائه میدهد.
DOMAIN_PORT=8080
DOMAIN=example.com
DOMAIN_SCHEME=https
MONGODB_CONNECTION=localhost
MONGODB_PORT=27017
MONGODB_USER=root
MONGODB_PASSWORD=secret
MONGODB_NAME=my_app
MONGODB_AUTH=admin
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=db_user
MYSQL_PASS=db_pass
MYSQL_DATABASE=my_db
SQLITE_PATH=./app.sqlite
ENABLE_LOCAL_DEBUGGER=true
isLocalDebug
FinchApp.config.isLocalDebug زمانی true برمیگرداند که متغیر محیطی LOCAL_DEBUG روی true تنظیم شده باشد، یا هنگامی که دارت در حالت debug اجرا میشود (Console.isDebug). از این flag برای فعالسازی خروجی verbose یا نوار debugger محلی استفاده کنید.
if (FinchApp.config.isLocalDebug) {
Console.p('حالت Debug فعال است');
}