#php #codeigniter #model-view-controller #view
#php #codeigniter #модель-представление-контроллер #Вид
Вопрос:
На моем сайте есть боковая панель, которая получает некоторую информацию из базы данных, и я не могу использовать контроллер для извлечения данных, потому что у меня другой контроллер и такая же боковая панель. Как я могу распечатать эти данные на странице просмотра. когда я писал в коде P.h.P. в представлении отображается ошибка, что он не может определять переменные.
Как я мог это сделать?
Ответ №1:
Когда вы обнаружите, что вам нужен один и тот же код во многих разных контроллерах, «пользовательская библиотека» (класс) является идеальным выбором. Документация по созданию собственных библиотек находится ЗДЕСЬ .
Контроллеры должны использовать модели для получения данных из базы данных. Пользовательские библиотеки также могут использовать модели так же, как контроллеры. Вот очень простая пользовательская библиотека, которая называется Sidebar
. Это зависит от модели ( sidebar_model
), которая не будет показана. Цель Sidebar
библиотеки — вернуть переменные, необходимые sidebar_view
файлу.
Файл: application/libraries/Sidebar.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Sidebar
{
protected $CI; // Read the documentation link to see why this is needed.
public function __construct()
{
$this->CI = amp; get_instance();
$this->CI->load->database(); //only needed if not already done
$this->CI->load->model('sidebar_model');
}
public function get_sidebar_data()
{
return $this->CI->sidebar_model->get_sidebar();
}
}
Метод библиотеки get_sidebar_data()
возвращает переменные для представления.
Вот контроллер, который использует пользовательскую библиотеку. Он будет использовать пользовательскую библиотеку и файл представления (не показан), содержащий HTML для боковой панели.
Файл: application/controllers/Main.php
class Main extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('sidebar'); //can also be autoloaded
}
public function index()
{
$data['sidebar'] = $this->sidebar->get_sidebar();
$this->load
->view('banner')
->view('sidebar_view', $data)
->view('main_view')
->view('footer_view');
}
}
Любой другой контроллер, который должен отображать боковую панель, будет использовать этот же шаблон.
Этот контроллер загружает четыре разных файла представления и использует «цепочку методов», которая поощряется. Цепочка методов выполняется немного быстрее. Но лучшая причина для его использования? Меньше ввода.
Метод chaning также может иметь такой тип:
$this->load->view('banner')->view('sidebar_view', $data)->view('main_view')->view('footer_view');
Но, IMO, помещение каждого ->view()
в отдельную строку облегчает чтение.
Ответ №2:
- Вы можете создать помощника для своих общих задач. Затем создайте функцию для своей боковой панели и вызывайте ее там, где вам это нужно. Проверьте эту ссылку для получения более подробной информации о создании помощника
- Вы также можете создать для этого библиотеку. Хотя это будет не очень хороший выбор.
Ответ №3:
- создайте боковую панель (страницу просмотра) и вызовите модель непосредственно внутри этой боковой панели (страницы просмотра).
- во-вторых, вызовите боковую панель (страницу просмотра) непосредственно внутри всех других страниц просмотра.