Как я могу передать переменную в представление из контроллера, который не имеет тот же URL-адрес?

Я ударил кирпичную стену. У меня есть файл просмотра header.php что я хочу использовать на всех страницах сайта. В этом файле я хочу вывести $total_itemsзначение которого равно $total_items в моем getTotalItems() метод, который я имею в контроллере (Items). Это связано с моделью ItemsModel с запросом SELECT count(item_id) as total_items FROM items;,

Проблема у меня в том, что хотя localhost/somemvcproject/items/get_total_items выходы $total_items без каких-либо проблем, любой другой URL, который я ввожу, не распознает его или не извлекает ItemsModel, Я понимаю, что это связано с настройкой моей маршрутизации URL, например localhost/somemvcproject/controller/action/param1/param2/param3 и т. д. и что я не создал контроллер с именем header, скажем так. Но как я могу получить доступ $total_items (или в этом отношении любая другая переменная) из Items getTotalItems() для представления, которое по существу не связано.

Единственное, что близко к работе вокруг меня, это загрузка ItemsModel в каждом контроллере каждый раз, когда я хочу включить header.php в противном случае $total_items является неопределенной переменной Но для каждой страницы сайта это кажется смешным.

То, что я хочу быть в состоянии сделать, это что-то вроде

`
<!--header.php-->
<html>
<head>
<title>My Items</title>
</head>
<body>
<div id="header">
<?php echo $total_items ?>
</div>
</body>
</html>

`

Как я могу получить доступ $total_items?

-1

Решение

Вы можете вызывать запрос модели в каждом контроллере, куда бы вы ни захотели получить $total_items ИЛИ ЖЕ
Вы можете расширить свой текущий класс контроллера своим собственным классом контроллера и поместить свой метод в свой класс контроллера.

Поскольку вы еще не объявили свой фреймворк, вам сложно показать пример кодирования.

0

Другие решения

Вы можете сделать запрос на вызов контроллера для получения данных при загрузке страницы.
пример:

     // use document ready function to make call on document load

$(document).ready(function()

//create ajax call

});
0

Я думаю, что ваша работа правильная. Единственное, что я хотел бы добавить, это то, что вы создаете parent controller, унаследованный всеми вашими контроллерами, где вы вычисляете $total_items и передать его на вид.

Затем вам нужно убедиться, что вызывается какая-то функция инициализации; это вполне может быть __construct(),

Что-то вроде:

abstract class ControllerBase
{
function __contruct()
{
$total_items = getTotalItems();
// Pass the $total_items to the views as you normally do
}
}

Тогда каждый из ваших контроллеров должен наследовать базовый класс:

class MyController extends ControllerBase
{
// Do the stuff
}

Вы должны помнить, хотя, если вы реализуете __construct() в ваших подклассах вы должны вызвать родителей:

class MyController extends ControllerBase
{
function __construct()
{
parent::__construct();
// MyController's own stuff
}
}

Таким образом, к тому времени ваш action называется, $total_items переменная уже была рассчитана и сделана доступной для просмотра.

0
По вопросам рекламы [email protected]