Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: autoload в mvc
Форумы портала PHP.SU » » Объектно-ориентированное программирование » autoload в mvc

Страниц (3): [1] 2 3 »
 

1. juramaj - 29 Января, 2015 - 18:55:34 - перейти к сообщению
Доброго времени суток! Подскажите пожалуйста, нет ли у кого примера route в реализации php, чтобы там была реализована функция __autoload. Может есть ссылка на источник где это всё реализовано. Заранее спасибо.
2. caballero - 29 Января, 2015 - 19:17:11 - перейти к сообщению
http://svyatoslav[dot]biz/misc/psr_t[dot][dot][dot]nslation/#_PSR-0

не очень понятно каким боком автолоад к MVC
ему пофиг какая там архитектура
3. Contr - 29 Января, 2015 - 20:04:12 - перейти к сообщению
http://www[dot]youtube[dot]com/watch?v=A[dot][dot][dot]7A20112CF84B2229

я постоянно рекомендую этого автора
4. GoDr - 29 Января, 2015 - 20:51:58 - перейти к сообщению
я для себя написал такой класс
PHP:
скопировать код в буфер обмена
  1. spl_autoload_register(array('LAutoloader', 'Connect'));
  2.  
  3. class LAutoloader
  4. {
  5.     /**
  6.      * Инициализация класса
  7.      *
  8.      * @param string $class_name - Имя файла класса
  9.      *
  10.      * @throws Exception
  11.      *
  12.      * @modification 24.01.2014 Gold Dragon
  13.      */
  14.     public static function Connect($class_name = '')
  15.     {
  16.         if (!class_exists($class_name)) {
  17.             if (strpos($class_name, 'Lib') === 0) { // Библиотеки : LibНазваниеКласса
  18.                 $filename = strtolower(substr($class_name, 3));
  19.                 $path = _LPATH_LIBRARIES . '/' . $filename . '/' . $filename . '.php';
  20.             }elseif(preg_match('#^L[A-Z]+#', $class_name)){ // Ядро системы : LНазваниеКласса
  21.                 $filename = strtolower(substr($class_name, 1));
  22.                 $path = _LPATH_ROOT . '/core/' . $filename . '.php';
  23.             }else{
  24.                 $path = null;
  25.             }
  26.             if(!is_null($path)){
  27.                 self::includeClass($class_name, $path);
  28.             }
  29.         }
  30.     }
  31.  
  32.     /**
  33.      * Подключение файла с классом
  34.      *
  35.      * @param $class_name
  36.      * @param $path
  37.      *
  38.      * @throws Exception
  39.      *
  40.      * @modification 24.01.2014 Gold Dragon
  41.      */
  42.     private static function includeClass($class_name, $path){
  43.         if(file_exists($path)){
  44.             require_once($path);
  45.             if(!class_exists($class_name)){
  46.                 throw new Exception(sprintf("The uploaded file <b>%s</b> class <b>%s</b> not found", $path, $class_name));
  47.             }
  48.         }else{
  49.             throw new Exception(sprintf("Not found the file <b>%s</b> with the class <b>%s</b>", $path, $class_name));
  50.         }
  51.     }
  52. }


Подключаем файлик и всё работает
Я использую подключение для двух вариантов
1. Это часть ядра
2. Это библиотеки
Соответственно файлы (классы) в разных папках
5. DelphinPRO - 30 Января, 2015 - 02:16:22 - перейти к сообщению
GoDrчто-то как-то сложно Улыбка нэймспэйсы - наше всё )
6. armancho7777777 - 30 Января, 2015 - 06:28:01 - перейти к сообщению
juramaj пишет:
Может есть ссылка на источник где это всё реализовано.

http://zf2[dot]com[dot]ua/doc/34
7. GoDr - 30 Января, 2015 - 08:04:29 - перейти к сообщению
DelphinPRO, моя CMS без нэймспэйсов. Если честно, то пока не осознал в них потребность. Т.е. не вижу необходимости из-за этого "полумифического" функционала переписывать на данном этапе движок Закатив глазки И даже сегодня я не вижу особых плюсов в них
8. Мелкий - 30 Января, 2015 - 08:32:00 - перейти к сообщению
GoDr пишет:
пока не осознал в них потребность

Вот потребность:
GoDr пишет:
// Библиотеки : LibНазваниеКласса

Пространство имён Lib, эмулируемое стандартом кодирования и наименования классов.
9. GoDr - 30 Января, 2015 - 09:38:42 - перейти к сообщению

Мелкий, это я понял, да и знал Улыбка Уже пару раз пытался перевести движок на это. Начинаю делать и понимаю что затраченное время не окупается вообще никак, уж очень маленькое преимущество Закатив глазки Может ещё раз попробую
10. juramaj - 30 Января, 2015 - 11:30:13 - перейти к сообщению
Спасибо всем за рекомендации. Сейчас буду разбираться.
(Добавление)
caballero пишет:
http://svyatoslav[dot]biz/misc/psr_t[dot][dot][dot]nslation/#_PSR-0

не очень понятно каким боком автолоад к MVC
ему пофиг какая там архитектура

Так у меня же у маршрутизаторе прописано подключение. Вот как у меня выглядит маршрутизатор.
PHP:
скопировать код в буфер обмена
  1. class Route
  2. {
  3.     static function start()
  4.     {
  5.         $controller_name = 'Main';
  6.         $action_name = 'index';
  7.         $routes = explode('/', $_SERVER['REQUEST_URI']);
  8.         if ( !empty($routes[1])){      
  9.             $controller_name = $routes[1];
  10.         }
  11.         if ( !empty($routes[2])){
  12.             $action_name = $routes[2];
  13.         }
  14.         $model_name = 'Model'.$controller_name;
  15.         $controller_name = 'Controller'.$controller_name;
  16.         $action_name = 'action'.$action_name;
  17.         $model_file = strtolower($model_name).'.php';
  18.         $model_path = "application/models/".$model_file;
  19.         if(file_exists($model_path)){
  20.             include "application/models/".$model_file;
  21.         }
  22.         $controller_file = strtolower($controller_name).'.php';
  23.         $controller_path = "application/controllers/".$controller_file;
  24.         if(file_exists($controller_path)){
  25.             include "application/controllers/".$controller_file;
  26.         } else {
  27.             Route::ErrorPage404();
  28.         }
  29.         $controller = new $controller_name;
  30.         $action = $action_name;
  31.         if(method_exists($controller, $action)){
  32.             $controller->$action();
  33.         } else {
  34.             Route::ErrorPage404();
  35.         }
  36.     }
  37.  
  38.     static function ErrorPage404()
  39.     {
  40.         echo "<img src='images/404.png' alt='404'>";
  41.     }
  42. }
11. esterio - 30 Января, 2015 - 12:09:01 - перейти к сообщению
juramaj пишет:
static function ErrorPage404()
{
echo "<img src='images/404.png' alt='404'>";
}


И опять эта статья. Уже в который раз вижу на форуме с ней проблемы в новичков
12. juramaj - 30 Января, 2015 - 12:39:50 - перейти к сообщению
esterio пишет:
juramaj пишет:
static function ErrorPage404()
{
echo "<img src='images/404.png' alt='404'>";
}


И опять эта статья. Уже в который раз вижу на форуме с ней проблемы в новичков

Так а какое решение этой проблемы? Может подскажите.
13. GoDr - 30 Января, 2015 - 13:18:11 - перейти к сообщению
Кстати, про namespace ... А что-то я не могу свой код переделать.

Кто работает с namespace, поясните что необходимо сделать и как подгружать

Допустим есть две категории классов
- ядро : namespace CORE
- библиотеки : namespace LIBRARIES

В ядре классы LXxxxXxxx
В библиотеках LibXxxxXxxx

Как правильно реализовать загрузчик? Что-то у меня с путями проблемы появились Недовольство, огорчение
14. Sail - 30 Января, 2015 - 13:37:50 - перейти к сообщению
GoDr, вот простейший пример, как оно выглядит:
PHP:
скопировать код в буфер обмена
  1. namespace application\vendor\lib\name;
  2.  
  3. class className {
  4.    
  5.     static public function getMyName() {
  6.         return __CLASS__;
  7.     }
  8. }
  9.  
  10. $r = className::getMyName();
  11.  
  12.  

Соответственно можно (или нужно) преобразовывать для autoloader'а пути до файла с классом, опираясь на его полное имя...
(Добавление)
PS: подробности.... (если вдруг) Улыбка
15. juramaj - 30 Января, 2015 - 13:56:45 - перейти к сообщению
Как избавится в маршрутизаторе на mvc от include, а вместо этого реализовать функцию autoload для загрузки классов. Вот мой маршрутизатор:
PHP:
скопировать код в буфер обмена
  1. class Route
  2. {
  3.     static function start()
  4.     {
  5.         $controller_name = 'Main';
  6.         $action_name = 'index';
  7.         $routes = explode('/', $_SERVER['REQUEST_URI']);
  8.         if ( !empty($routes[1])){      
  9.             $controller_name = $routes[1];
  10.         }
  11.         if ( !empty($routes[2])){
  12.             $action_name = $routes[2];
  13.         }
  14.         $model_name = 'Model'.$controller_name;
  15.         $controller_name = 'Controller'.$controller_name;
  16.         $action_name = 'action'.$action_name;
  17.         $model_file = strtolower($model_name).'.php';
  18.         $model_path = "application/models/".$model_file;
  19.         if(file_exists($model_path)){
  20.             include "application/models/".$model_file;
  21.         }
  22.         $controller_file = strtolower($controller_name).'.php';
  23.         $controller_path = "application/controllers/".$controller_file;
  24.         if(file_exists($controller_path)){
  25.             include "application/controllers/".$controller_file;
  26.         } else {
  27.             Route::ErrorPage404();
  28.         }  
  29.        $controller = new $controller_name;
  30.         $action = $action_name;
  31.         if(method_exists($controller, $action)){
  32.             $controller->$action();
  33.         } else {
  34.             Route::ErrorPage404();
  35.         }
  36.     }
  37.     static function ErrorPage404()
  38.     {
  39.         echo "<img src='images/404.png' alt='404'>";
  40.     }
  41. }

 

Powered by ExBB FM 1.0 RC1