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 [3]
Форумы портала PHP.SU » » Объектно-ориентированное программирование » autoload в mvc

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

31. esterio - 30 Января, 2015 - 19:18:16 - перейти к сообщению
juramaj пишет:
if(file_exists($controller_path)){
// include "application/controllers/".$controller_file;
} else {
Route::ErrorPage404();
}

поймите что здесь происходит и будет понимание.
Я кончено могу вам сказать полностю что зделать, но считаю плохой практикой ибо на понимание что происходит как раз и учаться.
32. juramaj - 30 Января, 2015 - 19:20:38 - перейти к сообщению
esterio пишет:
juramaj пишет:
if(file_exists($controller_path)){
// include "application/controllers/".$controller_file;
} else {
Route::ErrorPage404();
}

поймите что здесь происходит и будет понимание.
Я кончено могу вам сказать полностю что зделать, но считаю плохой практикой ибо на понимание что происходит как раз и учаться.

Хорошо, сейчас еще подумаю над этим вопросом. Если что то к вам обращусь с теми вариантами что придут мне в голову.
33. GoDr - 30 Января, 2015 - 19:59:32 - перейти к сообщению
esterio, да хватит издеваться над всеми Радость

Если файл, который располагается по адресу $controller_path существует
if(file_exists($controller_path)){

То мы закомментированием (отключим) строку где он должен был подключиться
// include "application/controllers/".$controller_file;

Если не существует
} else {

То мы покажем вам 404
Route::ErrorPage404();
34. skiphog - 30 Января, 2015 - 23:37:10 - перейти к сообщению
...
35. juramaj - 02 Февраля, 2015 - 13:14:13 - перейти к сообщению
GoDr пишет:
esterio, да хватит издеваться над всеми Радость

Если файл, который располагается по адресу $controller_path существует
if(file_exists($controller_path)){

То мы закомментированием (отключим) строку где он должен был подключиться
// include "application/controllers/".$controller_file;

Если не существует
} else {

То мы покажем вам 404
Route::ErrorPage404();

Так а как тогда написать сам функцию autoload? Чтобы всё автоматически подгружалось.
36. esterio - 02 Февраля, 2015 - 14:16:24 - перейти к сообщению
juramaj
слово автолоад какбы намекает что запуск происходит автоматически. тоесть если убрать проверку файла и инклуд, то после создания екземпляра класса контролера функция автолодинга запуститься автоматически. в качестве аргумента будет передано название класса (в даном случае контроллера), вот там и стоит подключать файл.
37. juramaj - 02 Февраля, 2015 - 16:15:47 - перейти к сообщению
esterio пишет:
juramaj
слово автолоад какбы намекает что запуск происходит автоматически. тоесть если убрать проверку файла и инклуд, то после создания екземпляра класса контролера функция автолодинга запуститься автоматически. в качестве аргумента будет передано название класса (в даном случае контроллера), вот там и стоит подключать файл.

Написал вот так, ничего не сработало. Где ошибка? Не пойму.
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.           //  spl_autoload_register(Route::loaderModel);
  21.           //  include "application/models/".$model_file;
  22.       //  }
  23.       //  $controller_file = strtolower($controller_name).'.php';
  24.        // $controller_path = "application/controllers/".$controller_file;
  25.        // if(file_exists($controller_path)){
  26.           //  include "application/controllers/".$controller_file;
  27.        // } else {
  28.        //     Route::ErrorPage404();
  29.        // }  
  30.   //      $controller = new $controller_name;
  31.   //      $action = $action_name;
  32.   //      if(method_exists($controller, $action)){
  33.   //          $controller->$action();
  34.   //      } else {
  35.   //          Route::ErrorPage404();
  36.   //      }
  37.     }
  38. }

И файл autoload.php
PHP:
скопировать код в буфер обмена
  1. function autoload($className)
  2.     {
  3.         $fileName  = '';
  4.         $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
  5.         require $fileName;  
  6.     }
  7.     spl_autoload_register('autoload');
38. esterio - 02 Февраля, 2015 - 16:48:21 - перейти к сообщению
juramaj пишет:
$controller = new $controller_name;

ок почти поняли, но счас что вот этот код делает
39. juramaj - 02 Февраля, 2015 - 16:52:00 - перейти к сообщению
esterio пишет:
juramaj пишет:
$controller = new $controller_name;

ок почти поняли, но счас что вот этот код делает

Так я же его закомментировал. Дальше не могу понять, что нужно.
(Добавление)
Как по мне так логика должна выглядеть так:
С URL берем 1-й элемент тоесть это будет у меня контроллер
PHP:
скопировать код в буфер обмена
  1. $controller_name = 'Main';
  2.         $action_name = 'index';
  3.         $routes = explode('/', $_SERVER['REQUEST_URI']);
  4.         if ( !empty($routes[1])){      
  5.             $controller_name = $routes[1];
  6.         }

Потом к этому всему прибавляю
PHP:
скопировать код в буфер обмена
  1. $controller_name = 'application_Controllers_Controller'.$controller_name;

Потом подключается наша ф-ция autoload, и мы делаем следующее
PHP:
скопировать код в буфер обмена
  1. $fileName .= str_replace('_', 'DIRECTORY_SEPARATOR', $className) . '.php';
  2. require $fileName;
  3.  

Вот как то так. Правильно или нет?
40. digi - 02 Февраля, 2015 - 20:28:08 - перейти к сообщению
нет, не правильно Улыбка

чем не устраивает ответ, который был 4 дня назад? разобраться с композером, ну минут 30 может быть, если первый раз, а потом только пользоваться.

с роутерами тоже можно не выдумывать велики, а подключить готовый роутер в том числе и симфонический и сразуже разобраться как конфигурировать через yaml

CODE (text):
скопировать код в буфер обмена
  1. http://symfony.com/doc/current/components/routing/introduction.html#load-routes-from-a-file
41. GoDr - 03 Февраля, 2015 - 08:28:05 - перейти к сообщению
juramaj пишет:
Так я же его закомментировал. Дальше не могу понять, что нужно.
Что-то я совсем запутался.. Если закомментировать строку где подключается класс или где создаётся класс, то как ты сможешь к нему обратиться то? Автоподключение и нужно чтобы подключать неподключенное..
А у тебя деление на ноль...
42. juramaj - 04 Февраля, 2015 - 12:21:17 - перейти к сообщению
Не прошло и пол года, но зато разобрался. Всем спасибо за помощь и подсказки. Радость
43. esterio - 04 Февраля, 2015 - 12:39:18 - перейти к сообщению
juramaj
надеюсь вы поняли полностю суть автолодинга в ПХП
44. juramaj - 04 Февраля, 2015 - 12:43:57 - перейти к сообщению
esterio пишет:
juramaj
надеюсь вы поняли полностю суть автолодинга в ПХП

Кажись понял. Теперь нужно по больше практики чтобы закрепить знания. Спасибо за помощь.
45. LIME - 04 Февраля, 2015 - 14:53:14 - перейти к сообщению
знания автозагрузки...ёёё маё
ппц
мельчает народ

 

Powered by ExBB FM 1.0 RC1