условно определить константы в php - PullRequest
0 голосов
/ 28 июня 2018

В CodeIgniter: возможно ли глобальное определение констант с проверкой сеанса, как в следующем примере

if($this->session->userdata("private")){
    define("TAB_ACCOUNTS","accounts");
    define("TAB_INVENTORY","inventory");
    define("TAB_INVENTORY_PRODUCTS","inventory_products");
    define("TAB_INVENTORY_VIEW","inventory_view");
    define("TAB_ORDER_PRODUCTS","order_products");
    define("TAB_ORDERS","orders");
    define("TAB_ORDERS_VIEW","orders_view");
    define("TAB_VENDORACCOUNTS","vendoraccounts");
}else{
    define("TAB_ACCOUNTS","back_accounts");
    define("TAB_INVENTORY","back_inventory");
    define("TAB_INVENTORY_PRODUCTS","back_inventory_products");
    define("TAB_INVENTORY_VIEW","back_inventory_view");
    define("TAB_ORDER_PRODUCTS","back_order_products");
    define("TAB_ORDERS","back_orders");
    define("TAB_ORDERS_VIEW","back_orders_view");
    define("TAB_VENDORACCOUNTS","back_vendoraccounts");
}

Мое требование - использовать запросы MySQL к имени таблицы на основе сеанса ...

ОБНОВЛЕНИЕ : мне нужно объявить эти константы в config.php или где угодно. Мне нужно получить доступ к тем во всем проекте, а не в функции или в контроллере

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Поскольку вам нужно настроить session и запустить его, самое простое решение - использовать хук post_controller_constructor.

In config.php

$config['enable_hooks'] = TRUE;

Файл application / config / hooks.php

$hook['post_controller_constructor'][] = array(
  'class' => '',
  'function' => 'set_tab_constants',
  'filename' => 'post_controller_hook.php',
  'filepath' => 'hooks'
);

В файле application / hooks / post_controller_hook.php

function set_tab_constants()
{
    if(isset($_SESSION['private']))
    {
        define("TAB_ACCOUNTS", "accounts");
        define("TAB_INVENTORY", "inventory");
        define("TAB_INVENTORY_PRODUCTS", "inventory_products");
        define("TAB_INVENTORY_VIEW", "inventory_view");
        define("TAB_ORDER_PRODUCTS", "order_products");
        define("TAB_ORDERS", "orders");
        define("TAB_ORDERS_VIEW", "orders_view");
        define("TAB_VENDORACCOUNTS", "vendoraccounts");
    }
    else
    {
        define("TAB_ACCOUNTS", "back_accounts");
        define("TAB_INVENTORY", "back_inventory");
        define("TAB_INVENTORY_PRODUCTS", "back_inventory_products");
        define("TAB_INVENTORY_VIEW", "back_inventory_view");
        define("TAB_ORDER_PRODUCTS", "back_order_products");
        define("TAB_ORDERS", "back_orders");
        define("TAB_ORDERS_VIEW", "back_orders_view");
        define("TAB_VENDORACCOUNTS", "back_vendoraccounts");
    }
}

Прямой доступ к суперглобальному $_SESSION позволяет избежать затрат на получение экземпляра CI, поэтому класс session можно использовать для чтения userdata. Этот метод в любом случае напрямую читает переменную $_SESSION. Избегайте посредников и покупайте напрямую!

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

0 голосов
/ 28 июня 2018

Насколько я вижу, ваши публичные / серверные таблицы (блок else) всегда имеют префикс back_, поэтому я бы порекомендовал не использовать эти константы.

Вместо этого используйте обычное имя таблицы в ваших моделях и создайте единственный метод, который проверяет сеанс и возвращает пустую строку или строку «back_», а затем используйте этот метод в предложении «from».

Другими словами: "зачем иметь много констант, когда единственное отличие - префикс строки?"


Кроме того, будьте осторожны с вашими реквизитами, если эти зеркальные таблицы представляют одинаковые записи, например, если записи в таблице accounts имеют одинаковый тип / тип записей в back_accounts Я понимаю, что они должны быть одинаковыми Таблица. :-) Я полагаю, вы не можете изменить этот реквизит: -)

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