|
|
|
| Подскажите как можно доработать код чтобы при загрузки контролера ему можно было передать метод get с каким-то параметром так выглядит код загрузки контроллера:
class Action {
private $registry;
private $folder;
private $controller;
private $method;
private $args;
public function __construct($registry)
{
$this->registry = $registry;
}
public function make($action) {
$this->folder = null;
$this->controller = null;
$this->method = null;
$this->args = null;
$action = preg_replace("/[^\w\d\s\/]/", '', $action);
$parts = explode('/', $action);
$parts = array_filter($parts);
foreach($parts as $item) {
$fullpath = APPLICATIONS . 'controllers/' . $this->folder . '/' . $item;
if(is_dir($fullpath)) {
$this->folder .= '/' . $item;
array_shift($parts);
continue;
}
elseif(is_file($fullpath . '.php')) {
$this->controller = $item;
array_shift($parts);
break;
} else break;
}
// Проверка папки
if(empty($this->folder)) {
$this->folder = 'main';
}
// Проверка контроллера
if(empty($this->controller)) {
$this->controller = 'index';
}
// Получения метода
if($c = array_shift($parts)) {
$this->method = $c;
} else {
$this->method = 'index';
}
// Получение аргументов
if(isset($parts[0])) {
$this->args = $parts;
}
}
public function go() {
$controllerFile = APPLICATIONS . 'controllers/' . $this->folder . '/' . $this->controller . '.php';
$controllerClass = $this->controller . 'Controller';
if(is_readable($controllerFile)) {
require_once($controllerFile);
$controller = new $controllerClass($this->registry);
if(is_callable(array($controller, $this->method))) {
$this->method = $this->method;
} else {
$this->method = 'index';
}
if(empty($this->args)) {
return call_user_func(array($controller, $this->method));
} else {
return call_user_func_array(array($controller, $this->method), $this->args);
}
}else{
header("HTTP/1.1 404 Not Found");
}
}
}
?>
|
загрузка контроллера происходит таким образом: папка контроллера/контроллер в папке/метод контроллера . Хочу сделать чтобы можно было передать метод get ( метод в запросе это указатель на функцию в контроллере public function index(), index это и есть метод который передается в запросе) контроллеру но что бы не пробовал не получается подскажите как можно выйти из ситуации или доработать код загрузки контроллера? | |
|
|
|
|
|
|
|
для: SkyFree
(23.03.2013 в 15:52)
| | знаете, не хочется даже пытаться понять что вы хотите именно доработать. очень сильно не нравится такая мешанина. класс как-то не понятно спроектирован, называется action, а выполняет функции не то роутера, не то фронт-контроллера | |
|
|
|
|
|
|
|
для: psychomc
(23.03.2013 в 17:30)
| | Это и есть роутер и ведь в ООП как и в MVC не особо важно как класс называется | |
|
|
|
|
|
|
|
для: SkyFree
(24.03.2013 в 11:05)
| | Make выполняет проверку на наличие контроллера
Go выполняет уже само открытие контроллера, я пытался сделать чтобы go тоесть уже при загрузке контроллеру передавался get метод | |
|
|
|
|
|
|
|
для: SkyFree
(24.03.2013 в 11:05)
| | как раз таки в ООП это очень важно. используя ООП вы начинаете программировать на более высоком уровне абстракции, поэтому имена классов должны бы правильными, т.е четко описывать то, что они делают. | |
|
|
|
|
|
|
|
для: SkyFree
(23.03.2013 в 15:52)
| | я извиняюсь кодировать пока не хочется ,вот ссылка http://www.youtube.com/watch?v=Kulox9AGW2A
здесь все очень просто думаю вам это поможет если нет то продолжим вашу тему | |
|
|
|