Перейти к содержанию
nestling

[Решено] вызываем функцию

Рекомендуемые сообщения

Как вызвать соседнею функцию в контролере?

предположим такую структуру:

class {
 function bar() {...}
 function index() {
  $data['bizbi'] = ?????
 }
}

Пробовал:

$this->bar(); // null
$this->$bar(); // ошибка
$bar(); // ошибка
$this->load->$bar(); // ошибка

не пашет =((( 

Изменено пользователем nestling

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


class {

 function bar() { return "строка бибзи бизби"; }

 function index() {

  $data['bizbi'] = $this->bar();

 }

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вариант №1, а почему null - ищите ответ в другом месте кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, хм... дуем думать. А если на пример в модели я буду использовать print_r или echo я смогу его позже увидеть? Просто там идет запрос в таблицу, а в ней может быть пусто, тогда выводить false, я эту проверку делаю в контролере после вызова модели. По этому может быть? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

огласите весь список, пожалуйста (ц)

в большинстве случаев вывод увидите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну весь кусок кода, который вас смущает :)

как выполняете запрос, что отдаете методом модели, что нужно контроллеру

пока что может быть все что угодно, от абсолютно верного, но почему-то удивляющего вас результата, до подавляемых ошибок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А..

class ControllerModuleLena extends Controller {
    // проверка на созданные профили
    public function checkProfile() {
        $this->load->model('lena/main');
        $result = $this->model_lena_main->getProfiles();


        if($result) {
            //тут в будущем поиск из полученных значений одно с активацией, если же нет то $result = true;
        } else {
            $result = false;
        }
       $this->response->setOutput(json_encode($result));
    }    
    public function index() {
     ...
     $data['activeProfile'] = $this->checkProfile(); // поч null
     ...
    }
}

 

class main extends Model {
    public function getProfiles() {
        $result = $this->db->query("SELECT id, name, active FROM `" . DB_PREFIX . "lena_profiles`");
        return $result->rows;
    }
 
В БД таблица есть, пустая.
Изменено пользователем nestling

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть предположение, работать с данными еще в модели, наверное нул из-за пустого ответа, при возрващении return $result->rows;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так

$this->response->setOutput('something');

устанавливает выдачу, отображение которой происходит в конце index.php, при этом вызывается через echo установленного значения

поэтому ваш метод

public function checkProfile() {

при вызове будет выводить результат, если далее в скрипте не будет вызван еще один $this->response->setOutput, который установит другое значение для конечного вывода

если же setOutput будет вызван, то ваш метод отработает вообще впустую

 

если вы хотите вернуть результат выполнения функции/метода, используйте вместо

$this->response->setOutput(json_encode($result));

обычный

return json_encode($result);

а на данный момент ваш метод ничего не возвращает, работает как процедура, и поэтому присваивание

$data['activeProfile'] = $this->checkProfile();

не сделает ничего, и переменной $data['activeProfile'] просто не существует

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну да) Спасибо большое

убрал 

$this->response->setOutput(json_encode($result));

поставил в условие 

return json_encode($result);

Но вот еще вопрос, если я буду вызывать функцию в приложении и получать ответ мне нужно будет в json, аджаксом, удаление $this->response->setOutput не повлияет? 

Изменено пользователем nestling

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

повлияет
напишите условие в методе

if (isset($_POST['json']) && $_POST['json']==1) {
    $this->response->setOutput(json_encode($result));
} else {
    return json_encode($result);
}

и при вызове аяксом добавьте этот параметр со значением в пост данные, ну или в строку, тогда и проверять надо $_GET

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То, что надо. спасибо. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.