Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

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

Пробовал:

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

не пашет =((( 

Змінено користувачем nestling
Надіслати
Поділитися на інших сайтах


спасибо, хм... дуем думать. А если на пример в модели я буду использовать 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
Надіслати
Поділитися на інших сайтах


так

$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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.