phper2~3年目ぐらいには何かMVCフレームワークをマスターしておこう的なお話

下記phpソースコードは、架空のWebシステムのログインユーザ登録+編集スクリプトを簡易化したもの。
よくモデルや拡張の使い方を知らんで結局ネイティブコーディングしている人がいますが、設計段階で準備していればこんなカンタンに済むんだよ的なイヤミソースです。

<?php
class User extends Ex_Controller
{
	function __construct()
	{
		parent::__construct();
		
		$db        = $this->StdDatabase();
		$user_data = $this->session;
		$post_data = $this->input->post();
		$err       = (object) array();
	}
	
	// Method
	public function __remap($method="index")
	{
	
		// Run validation
		$err->input = $this->Validator->user($post_data);

		// Validation error
		if (empty($err->input)===FALSE)
		{
			$this->view->error("Validation error.", $err->input,false);
		}

		// User actions
		switch ($method)
		{
			// regist user
			case "register":
			{
				if ($user_data->level > 2)
				{
					$col = $db->user->getColumn();
					
					foreach ($col as $key=>$val)
					{
						$col->$key = $post_data->register->$key;
					}
					
					$set = $db->user->Regist($col,$err->regist);
					
					if (empty($err->regist)===FALSE)
					{
						$this->view->error("Database error.", $err->regist, false);
					}
					else
					{
						$this->view->user("regist", 1, true);
					}
				}
				else
				{
					$this->view->error("Permission error.", "You do not have a permission of regist user.", false);
				}
				
				break;
			}
			
			// edit + delete user
			case "edit":
			{
				if ($user_data->level > 3)
				{
					$col = $db->user->getColumn();
					
					foreach ($col as $key=>$val)
					{
						$col->$key = $post_data->edit->$key;
					}
					
					$set = $db->user->Edit($col,$err->edit);
					
					if (empty($err->edit)===FALSE)
					{
						$this->view->error("Database error.", $err->edit,false);
					}
					else
					{
						$this->view->user("edit",$col->act, true);
					}
				}
				else
				{
					$this->view->error("Permission error.", "You do not have a permission of edit user.", false);
				}
				
				break;
			}
			
			// Default (return index)
			default:
			{
				$this->view->user("index", 1, true);
			}
		}
	}
}

コメント

タイトルとURLをコピーしました