FuelPHP Admin scaffoldingの使い方


FuelPHPには、マスター管理対象となるモデルの管理画面を自動生成するOilコマンド、Admin Scaffolding
がデフォルトで含まれています。

会社のモデルの管理画面を作成したときの手順です。

コードと名前だけをもつ会社マスター用のモデルを作成して、マイグレーションを実行

$ oil g admin company code:string name:string 
    Creating controller: /path/to/project/fuel/app/classes/controller/base.php
    Creating controller: /path/to/project/fuel/app/classes/controller/admin.php
    Creating views: /path/to/project/fuel/app/views/admin/template.php
    Creating views: /path/to/project/fuel/app/views/admin/dashboard.php
    Creating views: /path/to/project/fuel/app/views/admin/login.php
    Creating migration: /path/to/project/fuel/app/migrations/001_create_companies.php
    Creating model: /path/to/project/fuel/app/classes/model/company.php
    Creating controller: /path/to/project/fuel/app/classes/controller/admin/company.php
    Creating view: /path/to/project/fuel/app/views/admin/company/index.php
    Creating view: /path/to/project/fuel/app/views/admin/company/view.php
    Creating view: /path/to/project/fuel/app/views/admin/company/create.php
    Creating view: /path/to/project/fuel/app/views/admin/company/edit.php
    Creating view: /path/to/project/fuel/app/views/admin/company/_form.php
$ oil r migrate

管理画面にアクセス可能かどうかは Auth パッケージの User の所属グループによって判断されます。

Authパッケージを有効にします。

// app/config/config.php
    'always_load'  => array(
        // ...
        'packages'  => array(
            'orm',
            'auth',
        ),
        // ...
        'config'  => array('auth'),
        // ...
    ),

Authドライバーは Ormauth を指定しました。

 $ cp fuel/packages/auth/config/auth.php fuel/app/config/
// fuel/app/config/auth.php
return array(
    'driver' => 'Ormauth',
    'verify_multiple_logins' => false,
    'salt' => 'xxxxxxx',
    'iterations' => 10000,
);

Authパッケージ用のテーブルをデータベースに追加します。

$ oil r migrate --packages=auth
Performed migrations for package:auth:
001_auth_create_usertables
002_auth_create_grouptables
003_auth_create_roletables
004_auth_create_permissiontables
005_auth_create_authdefaults
006_auth_add_authactions
007_auth_add_permissionsfilter
008_auth_create_providers
009_auth_create_oauth2tables
010_auth_fix_jointables

管理画面にアクセスするユーザは、”Super Admins”のAuth_Groupに所属している必要があります。
追加された Controller_Admin をみると before で管理者かどうかをチェックしているのがわかります。

// fuel/app/classes/controller/admin.php
class Controller_Admin extends Controller_Base
{
    // ...
    public function before()
    {
        parent::before();

        if (Request::active()->controller !== 'Controller_Admin' or ! in_array(Request::active()->action, array('login', 'logout')))
        {
            if (Auth::check())
            {
                $admin_group_id = Config::get('auth.driver', 'Simpleauth') == 'Ormauth' ? 6 : 100;
                if ( ! Auth::member($admin_group_id))
                {
                    Session::set_flash('error', e('You don\'t have access to the admin panel'));
                    Response::redirect('/');
                }
            }
            else
            {
                Response::redirect('admin/login');
            }
        }
    }

Ormoauthの場合は、id=6 のグループが管理者グループとしてデータベースに登録されています。
ユーザーにグループを設定する画面はないので、データベースを直に修正して管理者を設定します。

とりあえず、Authパッケージのマイグレーションで追加される admin@example.org / admin ユーザーでログインすると、/admin 以下に管理画面が作成されています。

admin_scaffolding

参考:
FuelPHP での「管理パネル」チュートリアル – A Day in Serenity @ kenjis
Build an Admin Panel with the Fuel PHP Framework – Tuts+ Code Tutorial

,