Что переместить в модель Kohana? Здравствуйте! Взялся активно изучать PHP и Kohana. Решим написать небольшую CMS для интернет-магазина.
Заработался и оказалось что все модели и меня почему-то пустые.. Максимум что они содержат, это:bind('products', $products);

// получаем данные из таблицы "products"
$products = ORM::factory('product')->find_all();

$this->template->title = 'Все товары';
$this->template->description = 'Список всех товаров';
$this->template->content = $content;

// пагинация
$count = ORM::factory('product')->count_all();
$content->pagination = Pagination::factory(array('total_items' => $count));
$products = ORM::factory('product')
->limit($content->pagination->items_per_page)
->offset($content->pagination->offset)
->find_all();
}

public function action_cart() {

$content = View::factory('cartView');
$this->template->title = 'Корзина покупок';
$this->template->description = 'Список ваших товаров';
$this->template->content = $content;
$content->inCart = FALSE;
$content->inCart = $this->session->get('product2');
}

public function action_product() {

//узнаем id материала
$id = (int) Request::initial()->param('id');

// получаем данные из таблицы "products"
$product = ORM::factory('product', $id);

$content = View::factory('prodView')
->bind('product', $product);

$this->template->title = $product->title;

$this->template->content = $content;

$content->inCart = FALSE;

if(isset($_POST['Submit'])) {
$clientName = Arr::get($_POST, 'Name', '');
$clientPhone = Arr::get($_POST, 'Phone', '');
$clientAdress = Arr::get($_POST, 'Adress', '');
$orderNumber = Arr::get($_POST, 'Number', '');

$_POST = array(
'name' => $product->name,
'number' => $orderNumber,
'url' => $product->url,
'client_name' => $clientName,
'client_phone' => $clientPhone,
'client_adress' => $clientAdress
);

ORM::factory('order')
->values($_POST)
->save();

Controller::redirect('main/ordered');
}

if(isset($_POST['InCart'])) {
$this->session->set('product2', $product->name);
}
}
} // Products
Вроде бы как (насколько я понимаю) половина этого контроллера, должны быть в моделе (подключение к БД, например).
Прошу помощи: как правильно распределить код между контроллером и моделью? Спасибо.

21 Авг 2019 в 07:09
212 +1
0
Ответы
1

Для правильного распределения кода между контроллером и моделью вам следует переместить всю логику работы с базой данных (запросы, изменения и сохранения данных) из контроллера в модель. Модель должна отвечать за работу с конкретной сущностью (например, товаром, заказом и т.д.) и иметь методы для выполнения различных операций над этой сущностью.

В вашем случае, вам нужно создать методы в модели Model_Product для выполнения запросов к таблице "products". Например, вы можете создать методы для получения всех товаров, для получения конкретного товара по id и для сохранения нового заказа.

Примерно так может выглядеть модель Model_Product с добавленными методами:

<?php defined('SYSPATH') or die('No direct script access.');
class Model_Product extends ORM {
public function get_all_products(){
return $this->find_all();
}
public function get_product_by_id($id){
return $this->where('id', '=', $id)->find();
}
public function save_order($data){
$order = ORM::factory('Order');
$order->values($data)->save();
}
}

Измените ваш контроллер Controller_Products следующим образом, чтобы использовать методы модели:

public function action_index() {
$content = View::factory('prodAll')
->bind('products', $products);
// получаем данные из таблицы "products" через модель
$products = ORM::factory('product')->get_all_products();
// остальной код оставляем без изменений
}
public function action_product() {
//узнаем id материала
$id = (int) Request::initial()->param('id');
// получаем данные из таблицы "products" через модель
$product = ORM::factory('product')->get_product_by_id($id);
// остальной код оставляем без изменений
}

Таким образом, вы разделяете логику работы с данными на более удобные компоненты (модели), что делает код более структурированным и облегчает его поддержку и дальнейшее развитие.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир