Так что я сейчас в дилемме. Я хочу внедрить кнопку «Логин» на моем сайте, которая появляется, когда пользователь не вошел в систему. Однако я хочу, чтобы кнопка изменилась на ссылку на профиль пользователя, если кто-то уже вошел в систему.
Я не знаю, правильно ли это сделать, это поместить оператор if в представление, который отображает разные HTML на основе данных, переданных из контроллера, или если Контроллер должен решить, зарегистрирован ли пользователь или нет , и передать соответствующие структуры данных в представление. Каков правильный способ сделать это в 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; ?>
Очевидно, это будет утомительно делать в рамках каждого метода контроллеров, поэтому ознакомьтесь с этим вопросом, который позволит избежать дублирования кода.