June 5, 2012

FuelPHPで既存テーブルからScaffoldするTaskのadmin対応版。

当ソースの最新版はGithubにUPしてあります。
詳しくは、以下を御覧ください。

■FuelPHPで既存テーブルからScaffoldするTaskをgithubに。
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffoldtaskgithub.html

--

昨日、以下の記事を書きました。

FuelPHPで既存テーブルからScaffoldするTask。
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffoldtask.html

今回は、admin対応版です。
コマンドで表すと oil generate admin ... です。

変更点は、引数追加と、その引数によるcall_user_funcの分岐のみです。
php oil r scafdb $tablename
とすれば非adminで
php oil r scafdb $tablename 1
とすればadminでのscaffoldとなります。

app/tasks/scafdb.php
<?php
namespace Fuel\Tasks;

class Scafdb
{
    public static $ignore_fields = array(
        'id',
        'created_at',
        'updated_at',
    );

    /**
     * Scaffold by database table.
     *
     * Usage (from command line):
     *
     * php oil r scafdb $tablename
     */
    public static function run($tablename='', $is_admin=0)
    {
        if(!strlen($tablename))
        {
            exit('Usage : php oil r scafdb $tablename');
        }

        $args = self::mk_args(\DB::list_columns($tablename));
        array_unshift($args, $tablename);

        $subfolder = 'orm'; // TODO:
        call_user_func($is_admin ?
            'Oil\Generate_Admin::forge' : 'Oil\Generate_Scaffold::forge', $args, $subfolder);
    }

    private static function mk_args($cols)
    {
        $args = array();
        foreach ($cols as $col)
        {
            if(in_array($col['name'], self::$ignore_fields))
            {
                continue;
            }

            $constraint = ''; // TODO:
            $args[] = $col['name'] . ':' . $col['data_type'] . $constraint;
        }
        return $args;
    }

}

/* End of file tasks/scafdb.php */
尚、adminを表す引数は、1でなくても、PHP的に真と判定される文字(すなわち0以外)なら何でもadmin扱いとなります。

No comments:

Post a Comment