[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Модель Page страницы
codrilla
Здравствуйте.
Берём простой случай. Требования к сайту:
- динамическая генерация страниц
- блок новостей
То есть по идее должны быть две CRUD модели. Понятно, что редактирование, обновление и удаление доступно админу, чтение - всем пользователям.
Вопросы в следующем:
1) как правильно организовать модели и контроллеры?
2) как взаимодействовать с базой?

Все запросы будут отправляться файлу index.php, в нём создаваться экземпляр класса Route, в котором вызывается метод start

static function start($mRequestUri)
{
// контроллер и действие по умолчанию
$controller_name = 'Page';
$action_name = 'index';

$routes = explode('/', $mRequestUri);

// получаем имя контроллера
if ( !empty($routes[1]) )
{
$controller_name = $routes[1];
}

// получаем имя экшена
if ( !empty($routes[2]) )
{
$action_name = $routes[2];
}

// добавляем префиксы
$model_name = 'Model_'.$controller_name;
$controller_name = 'Controller_'.$controller_name;
$action_name = 'action_'.$action_name;

// подцепляем файл с классом модели (файла модели может и не быть)

$model_file = strtolower($model_name).'.php';
$model_path = "application/models/".$model_file;
if(file_exists($model_path))
{
include "application/models/".$model_file;
}

// подцепляем файл с классом контроллера
$controller_file = strtolower($controller_name).'.php';
$controller_path = "application/controllers/".$controller_file;
if(file_exists($controller_path))
{
include "application/controllers/".$controller_file;
}
else
{
/*
правильно было бы кинуть здесь исключение,
но для упрощения сразу сделаем редирект на страницу 404
*/

Route::ErrorPage404();
}

// создаем контроллер
$controller = new $controller_name;
$action = $action_name;

if(method_exists($controller, $action))
{
// вызываем действие контроллера
$controller->$action();
}
else
{
// здесь также разумнее было бы кинуть исключение
Route::ErrorPage404();
}

}


Контроллер страницы вероятно должен выглядеть следующим образом


class Controller_Page extends Controller {

function __construct()
{
$this->model = new Model_Page();
$this->view = new View();
}

function action_index()
{
$data = $this->model->get_data();
$this->view->generate('index_view.php', 'template_view.php', $data);
}

}



Класс Модели

class Model
{
public function get_data()
{
}
}


Для упрощения модель страницы описал так
<?php
class
Model_Page extends Model {
function get_data() {
$mysqli = new mysqli('localhost', 'root', 'pass', 'dbname');
$result = $mysqli->query("SELECT * FROM ru_pages WHERE id=1");
$row = $result->fetch_object();
return array ('title' => $row->title);
$result->close();
}
}


Еще раз вопросы:
как правильно организовать модель и контроллер?
как вытащить обращение к базе в отдельный класс?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.