Как определить переменные $ data, которые доступны всем функциям внутри контроллера? - PullRequest
0 голосов
/ 30 апреля 2019

Если возможно, я бы хотел определить значения в $ data один раз, чтобы они были доступны в любой из функций контроллера В настоящее время, когда я запускаю код, ни один из них не доступен.

Чтобы уточнить, когда я искал в Интернете, в большинстве ответов объясняется, как глобально определять переменные для всего приложения, я хотел бы указать, что он мне нужен только в контроллере.

Codeigniter 3 Справочная информация о себе: у меня нет опыта программирования, но я хочу учиться.

Что я сделал:

Я попытался добавить его в контроллер при запуске и сделать его общедоступным

Я попытался добавить его в функцию __construct

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Pages extends CI_Controller {

    public $data = [];
    public $footerScripts = [];

    public function __construct() {

        parent::__construct();

        //Authentication required for this controller
        if (!$this->ion_auth->logged_in())
        {
            //if not loggedin, reroute to the login page
            redirect('Auth/login', 'refresh');
        }

        $this->load->helper('sys');
        $this->load->helper('array');

        //set global information this is then overwritten by the individual functions
        $this->data['pageTitle'] = 'Pages';
        $this->data['activeNav'] = 'pages';
        $this->data['controllerIcon'] = 'flaticon-interface-6';

    }

    public function index()
    {
        //index doesn't always exist, instead we use list
        redirect(base_url('backend/pages/list'));
    }

    public function list()
    {
        $data = [];

        $data['view'] = "backend/defaultTheme/pages/list";
        $this->load->view('backend/defaultTheme/master/master2.php', $data);
    }

}

Желаемый результат:

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

$this->data['pageTitle'] = 'Pages';

и в представлении я хотел бы:

echo $pageTitle;

Без необходимости объявлять это в каждой функции контроллера

1 Ответ

0 голосов
/ 01 мая 2019

Ваш пример в значительной степени настроен правильно.

Вы определили свое свойство (так оно и называется) $ data, чтобы оно было доступно ВСЕМ методам (функциям) в вашем классе и только в этом классе..

public $data = []; // $data property

Похоже, у вас проблемы с методом списка.Это то, что вы в настоящее время имеете с комментариями, которые я включил ...

public function list()
{
    $data = []; // This is not needed as we have $this->data

    $data['view'] = "backend/defaultTheme/pages/list"; // This is just a string 
    $this->load->view('backend/defaultTheme/master/master2.php', $data); // Needs to reference the $this->data
}

Таким образом, это станет чем-то вроде ...

public function list()
{
    // Load the subview
    $this->data['view'] = $this->load->view('backend/defaultTheme/pages/list',NULL,TRUE);
    // Display the final page
    $this->load->view('backend/defaultTheme/master/master2.php', $this->data); 
}

Свойство $this->data доступно каждомуметод (функция) в классе.

Вы увидите, что я использовал это

$this->data['view'] = $this->load->view('backend/defaultTheme/pages/list',NULL,TRUE);

Как вы уже знаете, 2-й параметр - это данные страницы (переменные), и в этом случае ониNULL или просто ''.Третий параметр, если задано значение true (по умолчанию false), не будет отображать представление, но сохранит его содержимое.В этом случае в $this->data['view'].

Это должно заставить вас задуматься.

Вы должны прочитать руководство пользователя codeigniter, а я до сих пор делаю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...