#php #model-view-controller
#php #модель-представление-контроллер
Вопрос:
Я начинаю разрабатывать простое MVC-приложение. Я вызываю функцию ниже в моем контроллере
public function show()
{
if (!isset($_GET['id']))
return call('pages', 'error');
$ingredient = Ingredients::find($_GET['id']);
require_once('views/ingredients/show.php');
}
Я не могу получить доступ к таким $ingredient
атрибутам объектов, как $ingredient->item_id
или любым атрибутам в show.php . Но способен вызывать атрибуты объектов внутри одной и той же функции.
Мой show.php страница выглядит следующим образом
<p>This is the requested Ingredients:</p>
<p><?php echo $ingredient->item_id; ?></p>
<p><?php echo $ingredient->stock_id; ?></p>
<p><?php echo $ingredient->item_qunatity; ?></p>
<p><?php echo $ingredient->item_unit; ?></p>
Моя модель выглядит следующим образом. Имя этого класса — Ingredients
public static function find($id) {
$database = Database::getInstance();
$id = intval($id);
$query = $database->prepare('SELECT * FROM ingredients WHERE id = :id');
$query->execute(array('id' => $id));
$ingredient = $query->fetch();
return new Ingredients($ingredient['id'],$ingredient['item_id'],$ingredient['stock_id'], $ingredient['item_quantity'],$ingredient['item_unit']);
}
Комментарии:
1. вызываете ли вы функцию show () перед печатью $ingredient?
2. ДА. Я вызывал функцию ранее . Это происходит, если я сохраняю в переменной внутри функции и печатаю переменную в show.php вместо этого .
3. После получения данных из $ingredient = Ingredients::find($_GET[‘id’]); , дамп $ingredient , дает ли это все значение? дайте мне знать
4. Вы используете теги как для cakephp, так и для codeigniter-3. Вы как-то смешиваете эти два фреймворка?
5. Что именно
Ingredients::find()
возвращает?
Ответ №1:
Проблема здесь в том, что вы определяете эти функции в области одного метода, в то время как пытаетесь получить к ним доступ в области другого метода. Это две разные вещи.
Чтобы выполнить что-то подобное, вам нужно либо объявить переменную в глобальной области видимости (считается плохой практикой), либо сохранить ее внутри свойств объектов.