Можно ли поставить условную логику на представления CodeIgniter?

Так что я сейчас в дилемме. Я хочу внедрить кнопку «Логин» на моем сайте, которая появляется, когда пользователь не вошел в систему. Однако я хочу, чтобы кнопка изменилась на ссылку на профиль пользователя, если кто-то уже вошел в систему.

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

Related of "Можно ли поставить условную логику на представления CodeIgniter?"

Контроллер предназначен для вычисления и обработки данных и передачи результатов в представление, а представление принимает результаты и отображает их в 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); } } 

Предположение: user_id устанавливается в сеансе CI при входе пользователя в систему.

Посмотреть:

 <?php echo $partial; ?> 

В Codeigniter вы можете поставить if и else в поле зрения.

 if($this->session->userdata('your_session_variable')) { ?> <a href="profile_page_link">Profile</a> <?php } else { ?> <a href="login_page_link">Login</a> <?php } 

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

Это применимо для любого приложения на основе 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! <a href="">logout</a> <?php else: ?> <a href="">login here</a> <?php endif; ?> 

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