😀

FuelPHP ルーティングで管理画面とアプリの共存

2022/11/28に公開

運用方法によって賛否両論ですが、アプリの設定ファイルを管理画面でも参照したい場合にアプリと管理画面を同一のリポジトリに同居させたい場合があるのでそういう場合の設定をルーティングとenvの切り替えで実現するためのメモ

環境

  • centos6.3
  • fuelPHP1.5.3

事前準備に必要なもの

参考にしたサイト

bootstrap.phpに環境変数にadmin_developmentを追加する

fuelPHPのデフォルトの環境変数はdevelopment,test,staging,productionの4つですがそれ以外に追加しても(今回の例ではadmin_development,admin_production)configなどは環境変数名でオーバーライドしてくれます。
環境変数をbootstrap.phpに定義してみます

fuel/app/bootstrap.php
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] :'admin_development');

設定ファイル(fuel/app/config/admin_development/db.php)の作成

今回はサンプルでCRUD環境を作成するのでfuel/app/config/admin_development/db.phpを作成します。

fuel/app/bootstrap.php
<?php
return array(
	'default' => array(
		'type' => 'mysqli',
		'connection'  => array(
			'hostname' => 'ホスト名',
			'port' => 'ポート名',
			'database' => 'データベース名',
			'username'   => 'ユーザ名',
			'password' => 'パスワード',
			'presistent' => false
		),
		'enable_cache' => false,
		'profiling' => true,
	),
);

ルーティング設定ファイルの編集

ルーティングの設定でenvがadmin_development又はadmin_production以外の場合は例外を出力するように設定します

fuel/app/config/routes.php
<?php
return array(
	'_root_'  => 'welcome/index',  // The default route
	'_404_'   => 'welcome/404',    // The main 404 route
	//追加する
	'admin' => function (){
		if (\Fuel::$env != 'admin_development' || \Fuel::$env != 'admin_production')
		{
			throw new HttpNotFoundException('not found');
		}
		return \Request::forge('admin/$1', false)->execute();
	},
);

サンプルでCRUD環境を作る

php oil g scaffold admin name:string description:text
	Creating migration: /home/web/lo.fuel.master.org/fuel/app/migrations/003_create_admins.php
	Creating model: /home/web/lo.fuel.master.org/fuel/app/classes/model/admin.php
	Creating controller: /home/web/lo.fuel.master.org/fuel/app/classes/controller/admin.php
	Creating view: /home/web/lo.fuel.master.org/fuel/app/views/admin/index.php
	Creating view: /home/web/lo.fuel.master.org/fuel/app/views/admin/view.php
	Creating view: /home/web/lo.fuel.master.org/fuel/app/views/admin/create.php
	Creating view: /home/web/lo.fuel.master.org/fuel/app/views/admin/edit.php
	Creating view: /home/web/lo.fuel.master.org/fuel/app/views/admin/_form.php

マイグレーション(migrate)の実行

php oil refine migrate

http://localhost/adminにアクセスする

CRUD画面が表示されてcreate,read,update,delete画面が表示されてるはずです。

bootstrap.phpの値をdevelopmentに戻してアクセスしてみる

fuel/app/bootstrap.php
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);

http://localhost/adminにアクセスするとエラー画面に表示されるはずです。

実際の運用レベルですとfuel/app/bootstrap.phpにenvの記載をするのではなく
apache又はnginx側でenvを設定すればソースをいじらずにアプリ側と管理画面側でリポジトリを共有できます。

Discussion