My 'Content' class
Posted: Mon Mar 05, 2007 12:41 pm
For my framework I have a class that runs the controller and view class of the page that I am on. If you want to run a method in the controller, you can either send a GET var called "action=method_name" or a post var called "action[method_name]" the same applies for the view class's method.
Thats all this really does, sees if you want to run an action, then runs said action and then gets the proper view method and sets the $content to the return of that. Let me know what you think or if there is any sort of security gap or whatnot.
Thats all this really does, sees if you want to run an action, then runs said action and then gets the proper view method and sets the $content to the return of that. Let me know what you think or if there is any sort of security gap or whatnot.
Code: Select all
<?php
class content
{
const DEFAULT_VIEW_METHOD = 'main';
private $page;
private $configuration;
private $view_class;
private $controller_class;
private $content;
public function __construct($page, $configuration)
{
$this->page = $page;
$this->configuration = $configuration;
if (!array_key_exists($this->page, $this->configuration))
{
trigger_error('The page is undefined in the configuration', E_USER_ERROR);
}
$controller_method = $this->get_controller_method();
if (false !== $controller_method)
{
$this->load_controller_class();
}
$this->load_view_class();
}
private function load_controller_class()
{
if (
empty($this->configuration[$this->page]['controller']['location'])
||
!file_exists($this->configuration[$this->page]['controller']['location'])
)
{
return false;
}
require_once $this->configuration[$this->page]['controller']['location'];
$this->controller_class = singleton::get_object($this->configuration[$this->page]['controller']['class_name']);
$controller_method = $this->get_controller_method();
if (method_exists($this->controller_class, $controller_method))
{
$this->controller_class->$controller_method();
}
}
private function load_view_class()
{
if (!array_key_exists($this->page, $this->configuration))
{
trigger_error('The page is undefined in the configuration', E_USER_ERROR);
}
require_once $this->configuration[$this->page]['view']['location'];
$this->view_class = singleton::get_object($this->configuration[$this->page]['view']['class_name']);
if (is_object($this->controller_class) && $this->controller_class->get_view())
{
$view_method = $this->controller_class->get_view();
}
else
{
$view_method = $this->get_view_method();
}
if (method_exists($this->view_class, $view_method))
{
$this->content = $this->view_class->$view_method();
}
else
{
$this->content = $this->view_class->main();
}
}
private function get_view_method()
{
if (array_key_exists('view', $_GET))
{
return $_GET['view'];
}
else if (array_key_exists('view', $_POST))
{
$view = array_keys($_POST['view']);
return $view[0];
}
return self::DEFAULT_VIEW_METHOD;
}
private function get_controller_method()
{
if (array_key_exists('action', $_GET))
{
return $_GET['action'];
}
else if (array_key_exists('action', $_POST) && is_array($_POST['action']))
{
$action = array_keys($_POST['action']);
return $action[0];
}
return false;
}
private function build_header()
{
}
private function build_footer()
{
}
public function build_content()
{
$header = $this->build_header();
$footer = $this->build_footer();
return $header.$this->content.$footer;
}
}
?>