เพิ่ม Application เหมือน Frontend-Backend ใน Yii Framework2

wave
มานพ กองอุ่น 13 มิ.ย. 2017 13:40:32 9,827

มีคนถามมาว่าเราสามารถสร้าง 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 จะได้ดังนี้


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 9,827
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags yii2 yii2 advanced split application
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง