Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
arava
321 / 122 / 64
Регистрация: 30.06.2014
Сообщений: 674
1

Перенести данные во View

17.01.2017, 21:57. Просмотров 874. Ответов 8
Метки view (Все метки)

Помогите разобраться . Контроллер вызывает метод
PHP
1
action_show
. В контроллере я статически вызываю метод модели
PHP
1
Model_warehouse::showWarehouse($item);
В файле модели я выполняю логику, формирую обьект запроса с БД . Как мне передать вывод с БД на вьюху???
controller_warehouse.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function action_show() { 
 
        if(empty($_POST)) {
             $this->view->generate('show_view.php', 'template_view.php');     
        }
        else {
             $item        = htmlspecialchars($_POST['item']);
             $type        = htmlspecialchars($_POST['type']);
            // $fibers      = htmlspecialchars($_POST['fibers']);
 
             $fibers = ($_POST['item'] == 'Box') ? $fibers=NULL : htmlspecialchars($_POST['fibers']);
 
            Model_warehouse::showWarehouse($item);
 
            $this->view->generate('show_view.php', 'template_view.php');
        }
    }
model_warehouse.php
PHP
1
2
3
4
5
6
7
8
9
10
11
    public static function showWarehouse($item) {
 
        $db = DB::getConnection();
        $data = $db->query("SELECT * FROM warehouse");
 
          while($row = $data->fetch_assoc()) {
 
            echo '<tr><td>'. $row['id']. ' ' . $row['item']. ' ' . $row['type']. ' ' . $row['fibers']. ' '. $row['quantity'].'</td></tr>';
        }
 
    }
view_show.php
PHP
1
2
3
4
5
6
<table border="1">
<?php
 
//как сюда передать вывод данных???
?>
</table>

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2017, 21:57
Ответы с готовыми решениями:

Сгенерировать данные для view
Добрый вечер. При написании приложения использую архитектуру MVC . Данные в контроллере...

Перенести данные из xls (Excel) в mysql
Здравствуйте. В общем говоря вопрос в названии темы, но достаточно хотя бы просто заносить данные...

Перенести данные о товаре в модальное окно при клике на него
Доброго дня! При программировании вёрстки (я только учусь, тренировочный проект) столкнулся с...

Получить данные в поле текстбокса автоматом и перенести данные с формы на лист
Добрый день. Имеется таблица -реестр. Заполняется через форму. В поле текстбокса вводится номер...

Данные из View в Controller
Всем привет. Пытаюсь разобраться с MVC и не могу решить проблемму. Из View в Controller...

8
Para bellum
Эксперт PHP
4188 / 3117 / 1011
Регистрация: 06.01.2011
Сообщений: 9,092
18.01.2017, 10:08 2
Модель не должна ничего выводить. Из неё Вы должны возвращать данные и всё:
PHP
1
2
3
4
5
6
7
public static function get($item)
{
    $db = DB::getConnection();
    $data = $db->query("SELECT * FROM warehouse");
 
    return $data->fetch_all(MYSQLI_ASSOC);
}
Затем в контроллере делаете что-то вроде этого:
PHP
1
2
3
$this->view->generate('show_view.php', 'template_view.php', [
    'warehouses' => Model_warehouse::get($item);
]);
Вследствие чего в шаблоне станет доступна переменная $warehouses. А выводить данные так:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
<table border="1">
<?php foreach($warehouses as $warehouse):?>
<tr>
    <td>
        <?=$warehouse['id']?>
        <?=$warehouse['item']?>
        <?=$warehouse['type']?>
        <?=$warehouse['fibers']?>
        <?=$warehouse['quantity']?>
    </td>
</tr>
<?php endforeach ?>
</table>
0
arava
321 / 122 / 64
Регистрация: 30.06.2014
Сообщений: 674
18.01.2017, 23:01  [ТС] 3
Сделал так :
в контроллере
PHP
1
2
3
            $data = Model_warehouse::showWarehouse();
 
            $this->view->generate('show_view.php', 'template_view.php',$data);
в вид выдал
PHP
1
2
3
4
5
6
7
8
9
    foreach($data as $value):?>
        <tr>
            <td>
                <?=$value['id']?>
                <?=$value['item']?>
                <?=$value['type']?>
            </td>
        </tr>
    <?php endforeach ?>
Спасибо Вам Para bellum,

Дайте пожалуйста совет :
Теперь если в $data не пришли еще данные то на вьюхе я получаю
PHP
1
Warning: Invalid argument supplied for foreach()
При генерировании данных из таблицы подключать другую вьюху??
0
Para bellum
Эксперт PHP
4188 / 3117 / 1011
Регистрация: 06.01.2011
Сообщений: 9,092
19.01.2017, 07:11 4
Вы немного неправильно сделали. Чтобы массив в шаблоне был доступен в переменной $data, нужно передавать его так:
PHP
1
2
3
$data = Model_warehouse::showWarehouse();
 
$this->view->generate('show_view.php', 'template_view.php', compact('data'));
Или так:
PHP
1
2
3
$data = Model_warehouse::showWarehouse();
 
$this->view->generate('show_view.php', 'template_view.php', ['data' => $data]);
Добавлено через 3 минуты
Это к примеру. Чтобы точнее сказать -- уточните, что за шаблонизатор используете.
0
19.01.2017, 07:11
arava
321 / 122 / 64
Регистрация: 30.06.2014
Сообщений: 674
19.01.2017, 13:49  [ТС] 5
Если Вы имеете ввиду шаблинизатор типа smarty то я его не использую .
Логика такова: Если модели контроллера нету то формируем так :
PHP
1
 $this->view->generate('warehouse_view.php','template_view.php');
а если модель есть то нужно создавать $data , вот основной класс вида :
PHP
1
2
3
4
5
6
7
8
class View {
 
    function generate($content_view,$template_view,$data = null) {
 
        include 'application/views/' . $template_view;
 
    }
}
0
Para bellum
Эксперт PHP
4188 / 3117 / 1011
Регистрация: 06.01.2011
Сообщений: 9,092
19.01.2017, 14:38 6
А, вот оно как. Так... А если в контроллере сделать распечатку:
PHP
1
var_dump(Model_warehouse::showWarehouse());
Что выведется? Метод showWarehouse возвращает данные так, как я выше показал?
0
arava
321 / 122 / 64
Регистрация: 30.06.2014
Сообщений: 674
19.01.2017, 18:05  [ТС] 7
PHP
1
var_dump(Model_warehouse::showWarehouse());
выдает
PHP
1
array(1) { [0]=> array(7) { ["id"]=> string(1) "1" ["item"]=> string(5) "Cable" ["type"]=> string(8) "sewerage" ["fibers"]=> string(2) "12" ["quantity"]=> string(3) "500" ["description"]=> string(0) "" ["time"]=> string(19) "2017-01-19 14:37:43" } }
Этот код работает у меня. При отпрвке формы на запрос с БД выдает норм результат
PHP
1
2
3
            $data = Model_warehouse::showWarehouse();
 
            $this->view->generate('show_view.php', 'template_view.php',$data);
Проблема в том что без отправки формы во вьюху передается
PHP
1
foreach($data as $value)
и соответственно интерпретатор выдает
PHP
1
Warning: Invalid argument supplied for foreach()
Заранее извините если я что-то не понял .
0
Para bellum
Эксперт PHP
4188 / 3117 / 1011
Регистрация: 06.01.2011
Сообщений: 9,092
19.01.2017, 19:27 8
Лучший ответ Сообщение было отмечено arava как решение

Решение

Понятно. Проблему можно решить двумя способами.
1) Изменить метод generate, чтобы в нём по умолчанию был не null, а массив. Да и тип жёстко можно указать:
PHP
1
function generate($content_view, $template_view, array $data=[]) {
2) Проверять переменную $data в шаблоне на пустоту:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php if($data):?>
<table>
<?php  foreach($data as $value):?>
        <tr>
            <td>
                <?=$value['id']?>
                <?=$value['item']?>
                <?=$value['type']?>
            </td>
        </tr>
    <?php endforeach ?>
</table>
<?php endif ?>
Добавлено через 1 минуту
Но лучше оба способа применить.
1
arava
321 / 122 / 64
Регистрация: 30.06.2014
Сообщений: 674
19.01.2017, 19:40  [ТС] 9
Para bellum, в таком случае благодарность Вам за помощь, разобрался.
0
19.01.2017, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2017, 19:40

Не отображаються данные в View
Не отображаються данные в view из response формы. Пишет Not categorized. что не так дклаю?

пропадают данные из View
в дизайнере меняю вью, поля, к примеру, там же делаю обновить, данные исчезают, чтобы их увидеть,...

Объединить данные view
Как можно в репите или во вьюшке в xPages получить из такой вью {tbody} {tr} {td}Вата{/td}...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru