как identity поможет скрыть? Этот интерфейс проверяет, есть ли совпадения id с тем, кто сейчас пытается выполнить блок кода. Если пользователь авторизирован в системе эта функция читает его данные. Или я не верно думаю?
webquestions: Подредактируйте первый пост с кодом. Возможно я не увидел у вас ошибку или еще что-то. Концепция такова, что модель(1 модель = 1 таблица в БД) это как заготовка, в которую нужно напихать данных(из формы, руками, из массива или вообще из вне или через консоль), а после сохранить(model->save делает вставку заполненно заготовки). Я это сделал сразу в форме, а на контроллере указал откуда данные брать и что с ними делать потом.
Окей, если у вас есть объект. Отправьте этот объект в любое вью
Контроллер:
return $this->render('index', ['model' => $model,]);
Во вью views/yourController/index.php
<?php
$strTest = var_dump($model):
echo ''.$strTest.'';
?>
И убедится в том, что ваши данные попадают в контроллер ) Как только вы увидите в каком они виде сразу поймете что делать )
nirvimel Не обижайтесь, но это бред. Человек занимается фронтендом. Все мы рано или поздно сталкиваемся с задачами которые не знаем как решить или беремся за то, что еще не знаем как будем решать. И если человек не смог решить с первого раза, это не значит что он плохой программист, просто ему не хватает опыта. А по вашей логике, если бы вы будучи маленьким и родители учили вас ходить. То после первого падения. стоило бы сказать nirvimel Хождение это не твое, только не обижайся.
все учится и все решается практикой. Человек может и не создаст великие парадигмы, но вполне может быть годной пчелой всего улья =)
Silm: Есть индивидуальные вещи в каждом языке, есть еще старые школы. Когда в новинку выходят более современные функции, методы, подходы. Их начинают использовать и это верно(это укорачивает код и повышает читабельность), но часто бывает так, что эти новые вещи используют комплекс старых и если ты их не знаешь, то перестаешь понимать, что именно происходит в коде и проекте в целом. Представьте что у вас нет ORM и объектов в проекте вам придется работать с базой напрямую, открывтаь и закрывать подключения, работать исключительно с массивами. а вы SQL Не знаете с массивами мешкаетесь и вот вы уже на скамье запасных.
Конечно это простые вещи и легко ищутся, вас никто не выгонит, но ситуации бывают разные, а проект по времени растянется значительно. Не всегда все что вы хотите зависит от вас иногда выбор за вас делает начальство
webquestions: смотрите, вы в модели указываете то, какими свойствами обладает объект и как эти данные валидируется(какие поля обязательные и как они должны выглядеть строка, цифры и т.д.). К тому же модель юзер имплементирует интерфейс IdentityInterface - грубо говоря интерфейс о том, как YII узнает юзеров, и реализация токенов. Далее, в модели формы вы создаете форму с её полями указываете какие поля ДЛЯ ФОРМЫ обязательны. В моем когда в функции Signup если текущая форма с данными валидна, то мы создаем объект Юзера(изначально он пустой, но в нем есть свойства) эти свойства присваиваем в форме. Далее используется $user->save() т.е. текущий объект создался и нормально все происвоилось, этот объект мы отправляем туда откуда была вызвана эта функция т.е. в экшн. В экшене, создается модель формы, пока пустая, идет проверка, если в Суперглобалке есть данные, мы выполняем функцию из этой модели, которую я расписывал ранее т.е. Signup. (в которой уже само сейвится, и проверяется и идет вставка) если регистрация успешна, то выводим вид или сообщение об успехе. Если же по каким то причинам, хоть один IF не прокатит, он будет показывать форму до тех пор пока все не будет в порядке.
А теперь главное, что происходит у вас? Вы создаете форму, её человек заполняет, далее эти данные идут в контроллер и вы просите их сохранить. Только контроллер не понимает что вы от него хотите, поскольку нету объекта, что именно он должен вставить? у него есть данные, но он не знаете какая это таблица в БД. Если вы получаете данные из формы, то вы создаете юзера либо в форме (функцией) и там же присваиваете значения формы свеже созданному объекту юзеру и там сейвите(как это сделано у меня), либо передаете данные прямо в контроллер и создаете объект и присваиваете уже пришедшие данные из формы и сохраняете.
И Второе. судя по тому что, у вас массив с админом и т.п. я подумал что вы хотите передавать эти данные и сохранять. Они являются Массивом, а не объектом.
Либо посмотреть еще права на папки и файлы, но при правах другая ошибка летит, но все может быть. В остальном вариантов больше нет. Крайне странное поведение и трудно диагностируемое.
Сергей Беловенцев: как прописываете Url в Браузерной строке? Контрллер / экшн, скиньте пример. Аксес у вас тоже нормальный. Убедиться, что виды существуют, на которые вы отправляете.
У вас односторонняя связь по сути вы можете получить контакты принадлежащие юзеру. Перебрать контакты и извлечь массив Id потом сделать поиск по юзерам этим массивом id. Но лучше сделать Many-to-Many. Это логичнее и правильнее. У вас множество юзеров, из которых каждый может ссылать на множество других.
а как вы поступите, если завтра вам нужно будет добавить журналистов, call центр? вы будете создавать новые столбцы и переделывать каждое действие по новой, для конкретного разрешения ?
Сергей: вы можете доставать связи любой вложенности. таким способом.
$products = Product::find()->with('price.country')->(['country =:someCountry', [':someCountry' => $someCountry])->all();
Либо джойнить через joinWith все три таблицы и не париться.
1)Model::loadMultiple - это лишь вид загрузки моделей и тут он принимает его как массив моделей. Тоже самое и с валидатором. Ошибка означает, что он сбросил операцию поскольку ожидает массив, а получает Null.
2)Значит при отправке формы он у вас уже есть, нужно тогда вар дампом глянуть какая у него вложенность и вытащить.
3)Метод $model-save() Делает вставку если объект был создан через new, если нет и объект заполнен, он его обновляет. Установка в ложь, означает, что валидация сохраняемых данных не будет проводится. т.к. ранее валидация уже была.