【perl】(1)フレームワークを使って、ログイン処理・新規登録を行うプログラム

フレームワークを使って、新規登録→確認→修正→登録、ログインの処理を行うプログラムを作った。
先輩に助けてもらいながら、一日かけて作りました。
今日はもう疲れたので、詳しい説明はまた後日。

package UsersController;

use strict;
use base qw/IdaFrameWork/;

# モードの設定
sub setup {
    my $self = shift;

    $self->error_mode('error');   # エラー時、error関数を処理
    $self->start_mode('login');   # パラメータがない時、loginを処理
    $self->mode_param('mode');    # 実行モードのパラメータ名に「mode」を指定
    $self->run_modes(
        'login'   => 'do_login',
        'list'    => 'do_list',
        'new'     => 'do_new',
        'confirm' => 'do_confirm',
        'create'  => 'do_create',
        'edit'    => 'do_edit',
        'update'  => 'do_update',
    );
}

# エラー時に処理される
sub error {
    my($self, $err) = @_;

    return $err;
}

# パラメータ値が無しの時に処理される
sub do_login {
	my $self = shift;
	my $msg;
	
	if($self->query->param('login')){ #ボタンが押された
		my $sth = $self->dbh->prepare('select * from users where id = ?');
		$sth->execute($self->query->param('id'));
		my $h = $sth->fetchrow_hashref;
		if($h && $h->{pass} eq $self->query->param('pass')){
			$msg = 'OK';
		}else{
			$msg = 'NG';
		}
	}

	return $self->output_with_tt('tt/login.html', { msg => $msg });
}

sub do_list {
	my $self = shift;
	
	my $sth = $self->dbh->prepare('SELECT * from users');
	$sth->execute;
	my @list;
	while(my $h = $sth->fetchrow_hashref){
		push(@list, $h);
	}
	return $self->output_with_tt('tt/list.html', { list => \@list });
}

sub do_new {
	my $self = shift;

	return $self->output_with_tt('tt/new.html');
}

sub do_confirm {
	my $self = shift;
	
	return $self->output_with_tt('tt/confirm.html');
}

sub do_create {
	my $self = shift;
	
	$self->dbh->prepare(
		'insert into users(id, name, pass, email) values(?, ?, ?, ?)'
	)->execute(
		$self->query->param('id'),
		$self->query->param('name'),
		$self->query->param('pass'),
		$self->query->param('email'),
	);
	
	return $self->output_with_tt('tt/create.html');
}

sub do_edit {
	my $self = shift;
	my $h;
	
	if($::ENV{REQUEST_METHOD} eq 'GET'){
		my $sth = $self->dbh->prepare('select * from users where id = ?');
		$sth->execute($self->query->param('id'));
		if($h = $sth->fetchrow_hashref){
			$self->query->param($_, $h->{$_}) for(keys %$h);
		}
	}
	
	return $self->output_with_tt('tt/edit.html');
}

sub do_update {
	my $self = shift;
	
	$self->dbh->prepare(
		'update users set name = ?, pass = ?, email = ? where id = ?'
	)->execute(
		$self->query->param('name'),
		$self->query->param('pass'),
		$self->query->param('email'),
		$self->query->param('id'),
	);
	
	return $self->output_with_tt('tt/update.html');
}

1;