malina95
Дракула кода:)
Привет! Тут проблема одна появилась, поможете исправить?
Вообщем, я заметил очень сильный баг, или это не баг, пока не уверен...
При запросе test/index/ открывается контроллер IndexController, при запросе test/index/index/ открывается контроллер IndexController и метод indexAction(), но если запрос такой:
http://test/index/index/index/index/index/index/index/
то выскакивает ошибка:
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\OpenServer\domains\test\Core\FrontController.php on line 46
http://test/
а если запрос такой:
http://test/index/index/index/index/index/index/index/index/
то всё нормально, так вот как исправить такое множество параметров, как узнать сколько методу нужно аргументов?
ошибку я как нибудь сам исправлю... помогите пожалуйста
PHP:
<?php
namespace Core;
class FrontController {
private $defaultController = 'IndexController';
private $defaultModel = 'IndexModel';
private $defaultAction = 'indexAction';
private function getRequestUri () {
return $_SERVER['REQUEST_URI'];
}
public function Start () {
$uri = $this->getRequestUri();
//admin/editusers/id/1 - так выгледит строка запроса
$splits = explode('/', trim($uri, '/'));
//Выбор контроллера
$controller = !empty($splits[0]) ? ucfirst($splits[0]).'Controller' : $this->defaultController;
// Выбор модели если существует
$model = !empty($splits[0]) ? ucfirst($splits[0]).'Model' : $this->defaultModel;
//Выбор экшена
$action = !empty($splits[1]) ? $splits[1].'Action' : $this->defaultAction;
//выбор параметров
if (!empty($splits[2])) {
$keys = $values = array();
for ($i = 2, $cnt = count($splits); $i < $cnt; $i++) {
if ($i % 2 == 0)
$keys[] = $splits[$i];
else
$values[]= $splits[$i];
}
if ($keys and $values)
$params = array_combine($keys, $values);
}
else $params = false;
if (file_exists('App/Models/'.$model.'.php')) {
include 'App/Models/'.$model.'.php';
if (class_exists($model)) {
$model = new $model();
}
else die('Класса не существует');
}
else die('Класса не существует');
if (file_exists('App/Controllers/'.$controller.'.php')) {
include 'App/Controllers/'.$controller.'.php';
if (class_exists($controller)) {
$controller = new $controller($model);
if (method_exists($controller, $action)) {
$controller = $controller->$action($params);
return $controller;
}
else Functions::error404();
}
else die('Класса не существует');
}
else Functions::error404();
}
}
?>
При запросе test/index/ открывается контроллер IndexController, при запросе test/index/index/ открывается контроллер IndexController и метод indexAction(), но если запрос такой:
http://test/index/index/index/index/index/index/index/
то выскакивает ошибка:
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in C:\OpenServer\domains\test\Core\FrontController.php on line 46
http://test/
а если запрос такой:
http://test/index/index/index/index/index/index/index/index/
то всё нормально, так вот как исправить такое множество параметров, как узнать сколько методу нужно аргументов?
ошибку я как нибудь сам исправлю... помогите пожалуйста