[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Курс "MVC от теории к практике"
Страницы: 1, 2
Alehandr
Подготовка рабочего пространства

Всем привет! На этом занятии мы подготовим рабочее пространство для нашего движка.
Сразу предупрежу, что кодить мы будем в кодировке UTF-8, поэтому обзаведитесь редактором, поддерживающим данную кодировку (я использую NetBeans).

Первым делом добавьте на локальном сервере новый сайт и создайте структуру каталогов:
  • app
    |- config
    |- classes
    |- controllers
    |- models
    |- views
  • modules
  • core
    |- classes
Теперь добавьте в корневую директория файл .htaccess со следующим содержанием:
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
php_flag register_globals 0
AddDefaultCharset UTF-8
php_value default_charset UTF-8
php_value mbstring.func_overload 7
php_value mbstring.internal_encoding UTF-8
php_value mbstring.detect_order UTF-8

RewriteEngine on

RewriteRule ^(.+)$ index.php?route=$1 [QSA]

Теперь все пользовательские запросы будет обрабатывать файл index.php.

Но как-же нам выдавать пользователю картинки, css и javascript? Да очень просто, в папки, где будет лежать содержимое, которое пользователь может просматривать, добавляем другой .htaccess файл с содержанием:
RewriteEngine off


Теперь напишем функцию автоподгрузки наших классов (__autoload). Создайте файл core/functions.php со следующим содержанием:
<?php if (!defined('APP')) die('Access is forbidden!!!');

function __autoload($classname) {
$class = explode('_', strtolower($classname));

$folder = 'classes';
if (count($class) > 1) switch($class[1]) {
case 'controller':
$folder = 'controllers';
break;
case 'model':
$folder = 'models';
break;
}

if ($class[count($class) - 1] != 'core' && is_file(APP . $folder . DS . $class[0] . EXT)) { //Проверяем на наличие файла в папке приложения
define(strtoupper($class[0]) . '_CLASS');
require(APP . $folder . DS . $class[0] . EXT);
return true;
}

if (is_file(CORE . $folder . DS . $class[0] . EXT)) { //Проверяем на наличие в папке ядра
require(CORE . $folder . DS . $class[0] . EXT);
return true;
}

return false;
}


Ну а теперь наш index.php:
<?php

define('DS', DIRECTORY_SEPARATOR); //Только для сокращения
define('EXT', '.php'); //Расширение php файлов

define('APP', realpath(dirname(__FILE__)) . DS . 'app' . DS); //Корневая директория приложения
define('CORE', realpath(dirname(__FILE__)) . DS . 'core' . DS); //Корневая директория системных классов
define('MODS', realpath(dirname(__FILE__)) . DS . 'modules' . DS); //Корневая директория модулей

require(CORE . 'functions' . EXT); //Импортируем функции ядра (__autoload)

Starter::Run(); //Запускаем приложение...



На этом наш подготовительный этап закончен и вашим заданием до следующей лекции будет "Разбор полетов и как это работает?". В общем поэкспериментируйте с уже написанным кодом и попробуйте написать класс Starter, так, чтобы он подгружал модули и запускал Router (и его тоже напишите, пусть просто выводит $_GET['route']).
Быстрый ответ:

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