Jump to content
Sign in to follow this  
nestling

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

Recommended Posts

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

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

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

Пробовал:

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

не пашет =((( 

Edited by nestling

Share this post


Link to post
Share on other sites


class {

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

 function index() {

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

 }

}

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

А..

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;
    }
 
В БД таблица есть, пустая.
Edited by nestling

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

так

$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'] просто не существует

Share this post


Link to post
Share on other sites

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

убрал 

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

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

return json_encode($result);

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

Edited by nestling

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.