Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2012, 00:59   #1
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
Восклицание Подчистить/оптимизировать MVC систему

Доброй ночи форумчанам.

Есть MVC система, хочу её оптимизировать, почистить от старых частей кода.
Может подксажете для некоторых моментов реализацию попроще, понадежнее.

Вот index.php он всем розруливает.

Автолоадер ресурсов, не путать с лоадером который грузит из конфига.
PHP код:
<?php
class Autoload_Resource
{
    public static function 
load_class($className$dop=NULL)
    {
        
$obj $dop;
        
$className str_replace('_''/'$className);
        
$classPath DOCUMENT_ROOT.'/../'.$className.'.php';
        if (
file_exists($classPath)) {
            include_once 
$classPath;
        } else {
            
$rewrite $_SESSION['routers']['rewrite'];
            if(
$rewrite['module']!="Default"){
                include_once 
DOCUMENT_ROOT.'/../Application/Modules/'.$rewrite['controller'].'/Controllers/'.$rewrite['controller'].'Controller.php';
            }else{
                include_once 
DOCUMENT_ROOT.'/../Application/Controllers/'.$rewrite['controller'].'Controller.php';
            }
            return 
$rewrite;
        }
    }

}
Вложения
Тип файла: txt index.txt (12.9 Кб, 158 просмотров)
dem66 вне форума Ответить с цитированием
Старый 15.03.2012, 01:01   #2
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Вот код загружчика конфигов, та часть которая работает с INI файлами:
PHP код:
<?php
Class DF_Config{
    static function 
Ini($conf$name$type=NULL){
                global 
$_SESSION;
        
//$conf = explode('/', $conf);

        //unset($_SESSION[$conf]);
        
if(!isset($_SESSION[$name])){
            
$result = array();
            
ksort($result);
            
$temp_val = &$result;

                foreach(
parse_ini_file($conf) as $key =>$value){

                  
$temp_arr explode('.',$key);
                  
$temp_val = &$result;
                    foreach(
$temp_arr as $val){
                        if(!isset(
$temp_val[$val])){
                          
$temp_val[$val] = array();
                        }
                      
$temp_val = &$temp_val[$val];
                    }
                  
$temp_val $value;
                }
            
$_SESSION[$name] = $result;
        }else{
            
$result $_SESSION[$name];
        }
        if(empty(
$type)){
            
$result DF_Config::arrayToObject($result);
        }

        return 
$result;
        
    }
static function 
arrayToObject($array){
        if(
count($array)>0){
            foreach(
$array as $key => $value){
                if(
is_array($value)){
                    
$array[$key] = DF_Config::arrayToObject($value);
                }
            }
             
            return (object)
$array;
        }else{
            return 
FALSE;
        }
    }
}
?>
dem66 вне форума Ответить с цитированием
Старый 15.03.2012, 01:03   #3
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Код класа для кеширования, есть возможность кешировать страницы, конфиги, объекты:
PHP код:
<?php
Class DF_cache{
    Static function 
factory($type=NULL$save=NULL$array=NULL){
        Switch(
$type)
        {
            case(
'Page');
                if(isset(
$array[1]) && isset($array[0])){
                    
file_put_contents(DOCUMENT_ROOT.'/../assets/cache/page_'.$array[0].'.tmp'$array[1]);
                    return 
$array[1];
                }elseif(isset(
$array[0]) && !isset($array[1]) && file_exists(DOCUMENT_ROOT.'/../assets/cache/page_'.$array[0].'.tmp')){
                    
$file file_get_contents(DOCUMENT_ROOT.'/../assets/cache/page_'.$array[0].'.tmp');
                    return 
$file;
                }else{
                    return 
NULL;
                }
            break;
            case(
'Config');
                Switch(
$save)
                {
                case(
'Session');
                    if(isset(
$array[1]) && isset($array[0])){
                        
$_SESSION[$array[0]] = $array[1];
                        return 
$_SESSION[$array[0]];
                    }elseif(isset(
$_SESSION[$array[0]])){
                        return 
$_SESSION[$array[0]];
                    }else{
                        return 
NULL;
                    }
                break;
                case(
'File');
                    if(isset(
$array[1]) && isset($array[0])){
                        
$serialize serialize($array[1]);
                        
file_put_contents(DOCUMENT_ROOT.'/../assets/cache/config_'.$array[0].'.tmp'$serialize);
                        return 
$array[1];
                    }elseif(isset(
$array[0]) && !isset($array[1]) && file_exists(DOCUMENT_ROOT.'/../assets/cache/config_'.$array[0].'.tmp')){
                        
$userizlize implode("", @file(DOCUMENT_ROOT.'/../assets/cache/config_'.$array[0].'.tmp'));
                        return 
unserialize($userizlize);
                    }else{
                        return 
NULL;
                    }
                break;
                }
            break;
            case(
'Object');
                if(isset(
$array[1]) && isset($array[0])){
                    
$object serialize($array[1]);
                    
file_put_contents(DOCUMENT_ROOT.'/../assets/cache/object_'.$array[0].'.tmp'$object);
                    return 
$array[1];
                }elseif(isset(
$array[0]) && !isset($array[1]) && file_exists('tmp/object_'.$array[0].'.tmp')){
                     
$object implode("", @file(DOCUMENT_ROOT.'/../assets/cache/object_'.$array[0].'.tmp'));
                     return 
unserialize($object);
                }else{
                    return 
NULL;
                }
            break;
        }
    }
}
dem66 вне форума Ответить с цитированием
Старый 15.03.2012, 01:06   #4
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Зарание всем благодарен которые помогут добрым словом
dem66 вне форума Ответить с цитированием
Старый 16.03.2012, 16:37   #5
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

что неукого нету умных мыслей?
dem66 вне форума Ответить с цитированием
Старый 16.03.2012, 16:59   #6
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Умных мыслей нет. Посмотрите в нескольких фреймворках как это все реализуется и почитайте книжку о паттернах проектирования.
Cronos20 вне форума Ответить с цитированием
Старый 16.03.2012, 17:03   #7
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

та толку, уже смотрел. каждый сходит с ума по своему ничего толкового, или вобще пишут здоровенные класы.
А мне бы попроще. Например может кто подскажет как лучше реализовать подключение файлов. Ну видели же как у меня контроллер, виды, а лайаут подключаются. некоторое напрямую инклудом. некоторое чер функцию "типа автоподгрузки". Может подскежете нормальную замену.

И ненравится, ну прям мозолит глаза класс реквест. Куда бы его подевать и переделать (((
dem66 вне форума Ответить с цитированием
Старый 16.03.2012, 17:11   #8
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Попроще???? Хм .... я смотрю вы решили сами написать классическую систему MVC, с распределенной логикой, фронт контроллерами, роутингом и прочим-прочим и хотите "попроще"? Не понимаю! Если хотите научиться, то пишите все нормально и основательно каждый компонент, в противном случае ваш код не пригодится даже вам, потому что он 100% перерастет в огромную помойку, в которой даже вы не разберетесь,и это будет гораздо хуже процедурного программирования. Если пишите что-то на заказ, берите готовый фреймворк. Ну если ооочень хотите комментариев, может быть чуть попозже отпишусь по вашему коду
Cronos20 вне форума Ответить с цитированием
Старый 16.03.2012, 17:17   #9
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
в противном случае ваш код не пригодится даже вам, потому что он 100% перерастет в огромную помойку, в которой даже вы не разберетесь,и это будет гораздо хуже процедурного программирования.
Так об этом и речь. Не ну он работает как надо, просто в коде столько всякой гадости что задолбал уже. И никаких идей в голову неприходит.
dem66 вне форума Ответить с цитированием
Старый 16.03.2012, 17:17   #10
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

По поводу автолоадеров, в php уже можно использовать namespaces, с которыми гораздо проще.
Сможете избежать такого :
Код:
$className = str_replace('_', '/', $className);
-дерево классов построить гораздо проще
-легче сгруппировать классы по папкам
Cronos20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Spring MVC Exact Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 21.10.2011 14:38
Thread и MVC OnlyFart ASP.NET 0 06.05.2011 11:12
MVC AgentSmit PHP 2 11.01.2011 14:51
необходимость mvc mrgrudge PHP 2 13.12.2010 12:41
Кликер MVC++ jestyan Помощь студентам 0 10.12.2010 14:10