Алексей Уколов: по-моему мы немного ушли от темы. 1. Не все классы, а только родителю моделей надо реализовать интерфейс ArrayAccess. 2. Вы также можете использовать свой метод, просто синтаксис будет "корявый" - $data['getSum'] , но по сути тот же ленивый подсчет данных. По поводу "заказчик разорится", то многие вещи можно сделать быстрее и проще вообще отказавши от фреймворков, да и я не думаю что это прям время затратное вложение: реализовать интерфейс и поменять синтаксис. Просто это может в какой-то степени быть нечитабельно и не логично для большинство программистов. Если конечно не станет каким паттерном
Алексей Уколов: утрирую конечно, но что если завтра один программист добавит запрос в этот метод объекта, что не противоречит MVC, а второй отключит соединение с БД перед тем как вьюха начнет что-то показывать?
1. Вьюха не делает запросы в БД, не говорит моделям что хочет показать. Контроллеры не показывают данные, не делают запросы. Модели не смотрят на $_GET, $_POST чтоб отдать данные и тем более что-то показать (echo/print)
2. Как минимум тут https://github.com/yiisoft/yii2/blob/master/docs/g...
3. Когда нам надо сделать какие-то манипуляции с данными перед тем как работать с ними мы обычно переназначаем/создаем метод и закладываем логику туда - нормально! Но и этот самый объект мы может научить, что при работе с $object['methodName'] будет запускаться метод объекта. А когда модель/контроллер заменяет объект на массив, то сразу записываем результат в $array['methodName'] и вьюха покажет ее. Я же не говорю что мы полностью отказываемся от объектов, просто вьюха не будет знать что это объект
Так то я ни к чему не призываю =) лишь хотел услышать доводы против такой работы вьюхи.
1. "Преждевременная оптимизация - корень всех зол (с)." это я понимаю и поэтому не пишу сайты на Си, ассемблере и т.д. Плюс использую во всю ООП. Но и на будущее оставлять себе или другим камни на этой дороге не сильно хочется.
2. "Наоборот, это контроллеры отдают данные и по определению именно они навязывают шаблону логику его работы. И это нормально." Контроллеры отдают что хотят - да, но покажет ли это вьюха? Будет пусто или выброшено исключение, потому что программист, который ее писал заложил логику работы именно с объектом? Полезет программист во вьюху потому что она навязывает контроллеру отдать объект? Выходит что в Этом случаи вьюха навязывает логику для контроллера
3. Здесь дело не только в оптимизации в будущем, я в целом думаю что может вьюхе не стоит работать с объектами? Ведь вьюха не работает с БД и не делает сложные вычисления это работа моделей/либ, вьюха не говорит моделям что именно хочет показывать это делает контроллер. Ей отдали одну роль - представление. И хотел ее еще "тупее" сделать, ей не надо думать что именно показывать или вернее как работать с переменной что ей дали, ей надо думать лишь Как ее показать. А вот подготовить эту переменную уже дело контроллера/модели - им даем права решать что отдать вьюхе массив или объект, а вот вьюха уже не имеет право нос воротить к данным, которые ей передали.
Может конечно ошибаюсь, поэтому и задал тут вопрос =)
непонятно что именно вам надо: только одну запись и с ней работать или несколько записей. Список моделей или страница просмотра одной модели? Если список то делать надо как выше в примере, если один, то только его надо в json_encode. Когда в массиве, то jsonObject[1].first_name или если цикл jsonObject[i].first_name , когда одна модель то сразу jsonObject.first_name . вроде ничего не напутал
asder117: отключите всю валидацию и проверьте. Просто у вас там вывод ошибок и если были ошибки то показало бы. А тут из сомнительных что в $_POST['Item'] ничего нет и поэтому внутри условия if(isset($_POST['Item'])) ничего не работает
asder117: нет, до. Если после сделаете, то если будет пустой массив $_POSTто не будет работать, а так вы проверите какие данные приходят с формой, если пустой, то в html-форме надо указать method="post"
setcookie() надо отправлять до того как показать что-то юзеру или через ob_start() ловить весь вывод. Откройте инспектор в браузере и проверяйте заголовки от сервера, если приходят то с какой меткой времени, после обновления опять проверяйте какие заголовки и какие куки в них, так поймете приходят вообще куки и что с ними происходит
Игорь Пушкарский: "apt-get purge node" , потом можно "apt-get autoremove" . В репе дебиан8 был старый nodejs, я все ставил для "laravel-elixir" и "gulp" и кто-то там ругался что старая версия nodejs. Поэтому установил отсюда https://github.com/nodesource/distributions 0.12 версию. Может и 4 стоило поставить
да, я как раз про это и имел виду, что если в сторону начинаешь уходить, то тебе завтра и поддерживать, рассказывать как работает и краснеть пытаясь объяснить что так легче, проще. И выходит что программировать как бы сложнее становится, чтоб что-то новое добавить будет кучу сомнений