Чи правильно встановити умовну логіку на Views CodeIgniter?

Тож я в даний момент дилемою. Я хочу застосувати кнопку "Увійти" на своєму сайті, яка з'являється, коли жоден користувач не входить до системи. Однак я хочу, щоб кнопка змінювалася на посилання до профілю користувача, якщо хтось уже увійшов.

Я не знаю, правильним способом зробити це є вказування if у виді, який надає різні HTML на основі даних, переданих від контролера, або якщо Контролер повинен вирішити, чи входить користувач, чи ні , і передайте відповідні структури даних у режим перегляду. Який правильний спосіб зробити це в CodeIgniter?

5
Ви зберігаєте заплутані перегляди за допомогою шаблонів . Цілком можливо, що ви можете отримати користь від вивчення деяких основних принципів , замість того, щоб дотримуватися CI, як релігія.
додано Автор tereško, джерело
Ви вже використовуєте шаблони. Ви могли б принаймні подивитися на код і порівняти з "поглядами" codeigniter ... але знову ж таки, якщо люди зможуть зрозуміти, як CI було написано, вони не використовуватимуть його.
додано Автор tereško, джерело
Ви вже використовуєте шаблони. Ви могли б принаймні подивитися на код і порівняти з "поглядами" codeigniter ... але знову ж таки, якщо люди зможуть зрозуміти, як CI було написано, вони не використовуватимуть його.
додано Автор tereško, джерело
@ tereško Я не планував використовувати шаблони взагалі, але я бачу, як вони можуть бути корисними у цьому випадку.
додано Автор Ermir, джерело

9 Відповіді

Контролер призначений для обчислення та маніпулювання даними та передачі результатів до перегляду, а вигляд приймає результати та перетворює їх в HTML.

Якщо ви хочете використовувати вираз if , щоб показати або приховати якусь розмальовку, вам дозволено!

але якщо в зміненому розділі міститься багато інформації, я пропоную використовувати часткові подання та передавати їх зміст як змінні до головного вікна. І робити все це в контролері.

Для цього в CodeIgniter:

Контролер:

class Foo extends CI_Controller {
    public function bar()
    {
       //prevent getting error.
        $data['partial'] = '';

       //check if user is logged in.
        if ($this->session->userdata('user_id') == TRUE) {
            $data['partial'] = $this->load->view('partial/baz', '', TRUE);
        } else {
            $data['partial'] = $this->load->view('partial/qux', '', TRUE);
        }

        $this->load->view('my_view', $data);
    }
}

Assumption: user_id is set in CI session when user log in.

Перегляд:

<?php echo $partial; ?>
4
додано
Це саме те, що я шукав, дуже дякую. Я щойно розпочав роботу з CodeIgniter вчора, так що мені не виникла така ситуація.
додано Автор Ermir, джерело

У Codeigniter ви можете поміщати те, що таке, якщо таке.

if($this->session->userdata('your_session_variable'))
{
    ?>
    Profile
    <?php
}
else
{
    ?>
    Login
    <?php
}
4
додано
У такому ступені я хотів використати умови в перегляді. Я не мав наміру там взагалі запроваджувати будь-яку бізнес-логіку.
додано Автор Ermir, джерело

У Codeigniter ви можете поміщати те, що таке, якщо таке.

if($this->session->userdata('your_session_variable'))
{
    ?>
    Profile
    <?php
}
else
{
    ?>
    Login
    <?php
}
4
додано
У такому ступені я хотів використати умови в перегляді. Я не мав наміру там взагалі запроваджувати будь-яку бізнес-логіку.
додано Автор Ermir, джерело

У Codeigniter ви можете поміщати те, що таке, якщо таке.

if($this->session->userdata('your_session_variable'))
{
    ?>
    Profile
    <?php
}
else
{
    ?>
    Login
    <?php
}
4
додано
У такому ступені я хотів використати умови в перегляді. Я не мав наміру там взагалі запроваджувати будь-яку бізнес-логіку.
додано Автор Ermir, джерело

Очевидно, що логіка може бути вбудована в представлення даних, але ідея про MVC полягає в тому, щоб мати всю логіку контролера, тому я думаю, що ви переможете мету використання Codeigniter. Погляди взагалі використовуються для відтворення вмісту, переданого контролером.

2
додано

Очевидно, що логіка може бути вбудована в представлення даних, але ідея про MVC полягає в тому, щоб мати всю логіку контролера, тому я думаю, що ви переможете мету використання Codeigniter. Погляди взагалі використовуються для відтворення вмісту, переданого контролером.

2
додано

Очевидно, що логіка може бути вбудована в представлення даних, але ідея про MVC полягає в тому, щоб мати всю логіку контролера, тому я думаю, що ви переможете мету використання Codeigniter. Погляди взагалі використовуються для відтворення вмісту, переданого контролером.

2
додано

Це застосовано до будь-якої програми, що базується на MVC, а не лише на CI.

Оскільки ви змінюєте спосіб відображення view користувача користувачеві, у вашому перегляді немає нічого поганого. Проте логіка для цього повинна виконуватися в межах вашого controller . Наприклад, ваш контролер може виглядати приблизно так:

class x
{
  public function index()
  {
    if($session->get('logged_in') === true){
     //send a variable to the view
    }
  }
}

то, на вашу думку,

<?php if(isset($logged_in)): ?>
Hey User! logout
<?php else: ?>
login here
<?php endif; ?>

Очевидно, що це буде складно робити в кожному методі контролерів, тому перегляньте цю запитання, яка дозволить вам уникати дубліката коду.

1
додано
Я обговорював, чи використовувати цей метод, або використати Хашем способу цього. Я думаю, обидва методи можуть працювати в певних випадках.
додано Автор Ermir, джерело

Це застосовано до будь-якої програми, що базується на MVC, а не лише на CI.

Оскільки ви змінюєте спосіб відображення view користувача користувачеві, у вашому перегляді немає нічого поганого. Проте логіка для цього повинна виконуватися в межах вашого controller . Наприклад, ваш контролер може виглядати приблизно так:

class x
{
  public function index()
  {
    if($session->get('logged_in') === true){
     //send a variable to the view
    }
  }
}

то, на вашу думку,

<?php if(isset($logged_in)): ?>
Hey User! logout
<?php else: ?>
login here
<?php endif; ?>

Очевидно, що це буде складно робити в кожному методі контролерів, тому перегляньте цю запитання, яка дозволить вам уникати дубліката коду.

1
додано
Я обговорював, чи використовувати цей метод, або використати Хашем способу цього. Я думаю, обидва методи можуть працювати в певних випадках.
додано Автор Ermir, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php