มีคนถามมาว่าเราสามารถสร้าง Application เหมือน frontend/backenc ได้ไหม แต่ใช้การตั้งค่าและ vendor เดียวกัน คำตอบคือสามารถทำได้ครับ เพื่อให้เข้าใจ concept จะใช้ต้นแบบจาก backend ในการสร้าง application ชื่อ aomsin
สร้างความเข้าใจ
ในการสร้าง application ใหม่นั้นเราจะต้องตั้งค่า namespace และกำหนด namespace ทั้งหมดให้ตรงกัน เช่นในที่นี้เรากำหนด namespace คือ aomsin เราก็ต้องกำหนดทั้งใน controllers และ models เช่น ไฟล์ aomsin/controllers/SiteController.php ก็กำหนด namespace เป็น namespace aomsin\controllers เป็นต้น
สร้าง Application aomsin
ในขั้นตอนนี้ให้ทำการคัดลอก backend วางแล้วเปลี่ยนชื่อเป็น aomsin
กำหนดค่าต่างๆ
ให้ทำการแก้ไขค่าต่างๆ ในไฟล์ config ที่ aomsin/config/main.php โดยกำหนดค่า id, controllerNamespace, session id และ identityCookie แยกอิสระต่อกัน โดยมีตัวอย่างการกำหนดค่าดังนี้
<?php
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'language' => 'th-TH',
'name' => 'ออมสิน (Aomsin)',
'id' => 'app-aomsin',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'aomsin\controllers',
'bootstrap' => [],//'log'
'modules' => [],
'components' => [
'request' => [
'csrfParam' => '_csrf-aomsin',
],
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-aomsin', 'httpOnly' => true],
],
'session' => [
// this is the name of the session cookie used for login on the backend
'name' => 'advanced-aomsin',
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
],
'params' => $params,
];
จากนั้นเพิ่ม alias ที่ common/config/bootstrap.php ดังนี้
Yii::setAlias('@aomsin', dirname(dirname(__DIR__)) . '/aomsin');
จากนั้นแก้ไข namespace ให้ถูกต้องทั้งใน controllers และ models
aomsin/controllers/SiteController.php
<?php
namespace aomsin\controllers;
use aomsin\models\LoginForm;
และแก้ไข namespace ใน models เช่นกัน aomsin\models\LoginForm.php
<?php
namespace aomsin\models;
ตั้งค่าในฝั่ง server
ทำการตั้งค่าในฝั่ง server ให้สร้าง subdomain aomsin แล้วชี้ document root มาที่ aomsin/web อันนี้ไม่ได้ลงรายละเอียดนะครับ หลายๆ host ใช้ control panel ต่างกันหน้าตาต่างกันแต่ concept เหมือนกัน จากนั้นเมื่อเปิด url จะได้ดังนี้
ความคิดเห็น