Цитата (casper - gg @ 19.01.2016 - 23:42) |
если все делать последовательно, то ошибка обязательно найдется... вопрос времени |
Цитата (sergeiss @ 20.01.2016 - 00:23) |
я так и не понял, как именно ты переводишь ошибку. У тебя в тексте ошибки написано "русским по белому" , что в классе SiteController нет метода actionIndexcsite. Класс SiteController находится в файле SiteController.php. ОК, открываем его. Смотрим. Там только один-единственный метод actionIndex. А ты его где-то вызываешь (судя по тексту ошибки!!!) как actionIndexcsite. Разницу между 'actionIndexcsite' и 'actionIndex' видишь? Вот где ты его вызываешь в таком виде, уж ищи сам. Возможно, что в адресной строке такое пишешь, а оно передается в контроллер??? |
Цитата (RomanRomanov @ 20.01.2016 - 00:29) |
должен по идее содержать именно этот метод, а не actionIndexcsite(); |
Цитата (sergeiss @ 20.01.2016 - 00:33) |
Ну так ищи, где ты добавляешь 'csite'! Чудес на свете не бывает Покажи, в частности, какая у тебя при этом адресная строка в браузере, т.е. когда ты получаешь эту ошибку. |
Цитата (Wind @ 20.01.2016 - 00:55) |
Поиск по IDE, на csite, откуда то же он появился, не с луны же свалился |
var_dump($uriPattern);
var_dump($path);
var_dump($uri);
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
<?php
$routes = array(
// товар
'product/([0-9]+)' => 'product/view/$1',
// каталог
'catalog' => 'catalog/index', //actionIndex in CatalogController
// категория товаров
'category/([0-9]+)/page-([0-9]+)' => 'catalog/category/$1/$2', //actionCategory in CatalogController
'category/([0-9]+)' => 'catalog/category/$1', //actionCategory in CatalogController
//пользователь
'user/register' => 'user/register', //actionRegister in UserController
'cabinet' => 'cabinet/index', //actionIndex in CabinetController
// главная страница
'index.php' => 'site/index',
'' => 'site/index', //actionIndex in SiteController
//actionView in ProductController
);
$uri = 'csite';
foreach($routes as $uriPattern => $path){
// Сравниваем $uriPattern и $uri
if(preg_match("~$uriPattern~", $uri)){
// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
echo $internalRoute.'<br>';
// Определить контроллер, action, параметры
$segments = explode('/', $internalRoute);
// получаем имя контроллера
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
// получаем имя action()
$actionName = 'action'. ucfirst(array_shift($segments));
echo $controllerName.', '.$actionName.', '.print_r($segments,1).'<br>';
// остатки запрос из uri записываем в массив parametrs;
$parameters = $segments;
//
// echo '<pre>';
// print_r($segments);
$controllerFile = $controllerName.'.php'; // ROOT . '/app/controllers/' . $controllerName . '.php';
//// подключаем файл с именем контроллера
if(file_exists($controllerFile)){
include_once($controllerFile);
}
//// создаем объект только что пожключенного класс-контроллера
$controllerObject = new $controllerName;
//// передаем параметры в action этого контроллера с помощью ф-ции call_user_func_array
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
//
var_dump($result);
//
// if($result != null){
// break;
// }
}
}
<?php
class SiteController{
public function actionIndex(){
// Список категорий для левого меню
// $categories = Category::getCategoriesList();
// Список последних товаров
// $latestProducts = Product::getLatestProducts(6);
// include_once(ROOT . '/app/views/site/index.php');
return true;
}
}
Цитата |
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'SiteController' does not have a method 'actionIndexcsite' in C:\XXXXXX\test\routes.php on line 63 |
Цитата |
site/indexcsite/indexssite/indexisite/indextsite/indexesite/index |
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);