Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 [2] 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как устранить ошибку: «call_user_func_array() expe, Как устранить ошибку: «call_user_func_array() expects parame
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




Цитата (casper - gg @ 19.01.2016 - 23:42)
если все делать последовательно, то ошибка обязательно найдется... вопрос времени

да, буду разбираться, но если у вас будет время и не будет его жалко, посмотрите у меня на гитхабе, буду очень признателен)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14974
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 1 день
Карма: 443




RomanRomanov, я так и не понял, как именно ты переводишь ошибку. У тебя в тексте ошибки написано "русским по белому" smile.gif, что в классе SiteController нет метода actionIndexcsite.
Класс SiteController находится в файле SiteController.php. ОК, открываем его. Смотрим. Там только один-единственный метод actionIndex. А ты его где-то вызываешь (судя по тексту ошибки!!!) как actionIndexcsite. Разницу между 'actionIndexcsite' и 'actionIndex' видишь?

Вот где ты его вызываешь в таком виде, уж ищи сам. Возможно, что в адресной строке такое пишешь, а оно передается в контроллер??? (твой роутер наводит на такие мысли)

Это сообщение отредактировал sergeiss - 20.01.2016 - 00:26


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




Цитата (sergeiss @ 20.01.2016 - 00:23)
я так и не понял, как именно ты переводишь ошибку. У тебя в тексте ошибки написано "русским по белому" , что в классе SiteController нет метода actionIndexcsite.
Класс SiteController находится в файле SiteController.php. ОК, открываем его. Смотрим. Там только один-единственный метод actionIndex. А ты его где-то вызываешь (судя по тексту ошибки!!!) как actionIndexcsite. Разницу между 'actionIndexcsite' и 'actionIndex' видишь?

Вот где ты его вызываешь в таком виде, уж ищи сам. Возможно, что в адресной строке такое пишешь, а оно передается в контроллер???

я все вижу, должен вызываться actionIndex(), в роутах прописано category/index, далее из этой строки берется index к нему добавляется action, Первую букву index переводим в верхний регистр - это и есть имя вызываемого метода, переданного в функция call_user_fucn_array(array($controllerObject, $actionName), $parameters), actionName - должен по идее содержать именно этот метод, а не actionIndexcsite();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14974
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 1 день
Карма: 443




Цитата (RomanRomanov @ 20.01.2016 - 00:29)
должен по идее содержать именно этот метод, а не actionIndexcsite();

Ну так ищи, где ты добавляешь 'csite'! Чудес на свете не бывает smile.gif Покажи, в частности, какая у тебя при этом адресная строка в браузере, т.е. когда ты получаешь эту ошибку.


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




Цитата (sergeiss @ 20.01.2016 - 00:33)
Ну так ищи, где ты добавляешь 'csite'! Чудес на свете не бывает  Покажи, в частности, какая у тебя при этом адресная строка в браузере, т.е. когда ты получаешь эту ошибку.

вот такая адресная строка - http://e-shopper.ru/cabinet
в том то и дело, csite нигде не добавляю, остальные методы по этому же роутеру прекрассно отрабатывают, не добавляя к себе всякие csite
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 7 дней
Карма: 9




RomanRomanov

Поиск по IDE, на csite, откуда то же он появился, не с луны же свалился


--------------------
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




Цитата (Wind @ 20.01.2016 - 00:55)
Поиск по IDE, на csite, откуда то же он появился, не с луны же свалился

ищу...
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11787
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 14 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 14 дней


https://github.com/Roman-Romanov97/phpshop/.../router.php#L23
var_dump($uriPattern);
var_dump($path);
var_dump($uri);
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);

вывод в студию


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14974
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 1 день
Карма: 443




RomanRomanov, у меня осталось единственное разумное предположение, что твой код и код на гитхабе отличаются. Я взял твой код роутера, в урезанном виде (из конфига и основного файла) - нет ошибки, всё нормально обрабатывается.

Покажи текущее содержимое (с твоего компа) файлов config/routes.php и app/components/router.php, чтобы сравнить их с гитхабовскими версиями.

PS. Сорри, не совсем получается хорошо с твоим кодом smile.gif Но той ошибки нет.

Это сообщение отредактировал sergeiss - 20.01.2016 - 01:15


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14974
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 1 день
Карма: 443




RomanRomanov, вот смотри....
Из твоих файлов получил такие:
routes.php
<?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;
// }

}
}


и

SiteController.php
<?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

Я могу точно сказать, что твою обработку я не менял :)

А переменная $internalRoute содержит вот такую, очень странную величину
Цитата
site/indexcsite/indexssite/indexisite/indextsite/indexesite/index


Короче говоря, ищи ошибку в этой строке:
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);


Я думаю, что подобный эффект можно получить и при других каких-то данных в переменной $uri, т.к. производится некорректная работа с регулярками.

Это сообщение отредактировал sergeiss - 20.01.2016 - 01:31


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    2   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




спасибо всем огромное!!!Вчера не выдержал, уснул.
Цитата (sergeiss @ 20.01.2016 - 01:28)
Я думаю, что подобный эффект можно получить и при других каких-то данных в переменной $uri, т.к. производится некорректная работа с регулярками.

Попробую что-нибудь пересмотреть, на гите обновил содержимое, но оно по путям не отличается, остальное тоже скорее всего, тоже самое.
Цитата (sergeiss @ 20.01.2016 - 01:10)
Покажи текущее содержимое (с твоего компа) файлов config/routes.php и app/components/router.php, чтобы сравнить их с гитхабовскими версиями.

Изменений вроде нет.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




user posted image
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RomanRomanov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 14
Пользователь №: 42405
На форуме: 10 месяцев, 18 дней
Карма:




почему то код пытается лишний раз вызвать метод главной страницы в контроллере SiteControoller. В общем я пока просто подавил это предупреждение)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Makhmut  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 43329
На форуме: 3 месяца, 6 дней
Карма:




Просто положи вверx этот роут в файле routes.php:
'product/([0-9]+)' => 'product/view/$1',

Это сообщение отредактировал Makhmut - 1.09.2016 - 15:35
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bespeco  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43330
На форуме: 3 месяца, 6 дней
Карма:




В файле router.php вывел переменную $internalRoute
// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
echo $internalRoute;

Для гдавной страницы результат: site/index
для несуществующей страницы eshopper.ru/12345
выдаёт такое:site/index1site/index2site/index3site/index4site/index5site/index
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 [2] 3  Ответ в темуСоздание новой темыСоздание опроса