Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 09 Окт 2007 15:48:29 Заголовок сообщения: Как передать большой объем данных при вызове контроллера |
|
|
Обычно вызов какого-либо контроллера модели использует $this->requestAction('Model/Controller/Param1/.../ParamN');
Можно ли на прямую вызвать для определенной модели ее контроллер и передать ему данные, например массив данных. Передача данных через requestAction в некоторых случаях не очень удобен... |
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 09 Окт 2007 18:40:37 Заголовок сообщения: |
|
|
Попробуйте до обращения к requestAction сделать данные которые вам нужно передать глобальными, но, честно говоря, это отнюдь не правильный выход из положения.
По идее вы в контроллере не должны получить данных больше, чем объявили в функции к которой обращаетесь, поэтому requestAction это вполне логически верное решение. |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 10 Окт 2007 08:47:09 Заголовок сообщения: |
|
|
Спасибо! Я думаю, что конечно это не самое красивое решение, но я решил попробывать передать данные через Session!
|
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 10 Окт 2007 08:48:39 Заголовок сообщения: |
|
|
А глобализовать не получается? Ибо $_SESSION - это уже вообще костыль в данном случае. |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 10 Окт 2007 17:02:52 Заголовок сообщения: |
|
|
Нет, все оказалось просто!
У меня есть форма, которая должна сохранять файл и описание к нему.
И есть две модели: Photo и File
В File я сохраняю данные о переданном файле, а Photo - описание и ссылку на File.
Решил так. В PhotosController проверяю валидность данных формы, потом вызывают $file_id=$this->requestAction('files/add/Photos');
Потом возвращенный результат $file_id использую.
В FilesController
Код: |
function add($obj=null)
{
if (!empty($obj) && isset($this->data[$obj]['file']))
{
$this->data['File']['file']=$this->data[$obj]['file'];
else return false;
if ($this->File->save($this->data)) return $this->File->id;
}
return false;
}
|
Ведь данные формы будут доступны в данном случае и в $this->data['Photo'];
сейчас подумал о том, что можно использовать в форме не
$html->file('Photo/file'); а $html->file('File/file');
Тогда все упрощается!!! |
|
Вернуться к началу |
|
|
KPOTOB Гость
|
Добавлено: 10 Окт 2007 22:45:35 Заголовок сообщения: |
|
|
Жесть
И главное не понятно толи смеятся толи плакать |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 10 Окт 2007 23:30:21 Заголовок сообщения: |
|
|
Пожалуйста немного разъясните как действует $this->Photo->File->save();
File в данном случае моя модель? Тогда как посторить такую красивую взаимосвязь?
Дело в том, что я хочу, чтобы Модель File с ее контроллерами можно было использовать и в других моделях без лишних переделок.
Я понял, что лучше через var $uses.
А requistAction нужен чтобы получать данные от другого контроллера или готовое отображение...
Можете подсказать, как лучше сделать аутотентификацию пользователя и отслеживание того, что его id действителен и есть в базе и ему разрешены соответствующие операции. Мне важно, что такой пользователь существует с верным id для дальнейших операций с базой...? |
|
Вернуться к началу |
|
|
Антон Исайкин Site Admin
Зарегистрирован: 08 Окт 2007 12:02:56 Сообщения: 150 Откуда: Санкт-Петербург
|
Добавлено: 11 Окт 2007 00:41:30 Заголовок сообщения: |
|
|
starosta писал(а): | Можете подсказать, как лучше сделать аутотентификацию пользователя и отслеживание того, что его id действителен и есть в базе и ему разрешены соответствующие операции. Мне важно, что такой пользователь существует с верным id для дальнейших операций с базой...? |
Прекрасный компонент obAuth решает эти проблемы. А еще для конкретных прав в к конкретному элементу можно использовать ACL. |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 11 Окт 2007 08:29:05 Заголовок сообщения: |
|
|
спасибо! очень полезно! |
|
Вернуться к началу |
|
|
KPOTOB Гость
|
Добавлено: 11 Окт 2007 11:31:13 Заголовок сообщения: |
|
|
starosta писал(а): | Пожалуйста немного разъясните как действует $this->Photo->File->save();
File в данном случае моя модель? Тогда как посторить такую красивую взаимосвязь?
Дело в том, что я хочу, чтобы Модель File с ее контроллерами можно было использовать и в других моделях без лишних переделок.
Я понял, что лучше через var $uses.
А requistAction нужен чтобы получать данные от другого контроллера или готовое отображение... |
Согласно MVC - С отвечает за интерактив с пользователем - потому imho следует избегать вызова контроллера из контроллера (тем более что из можно сделать вызов из layout или view).
Согласно задней презентахи от Кейкщиков - максимум кода - во V - минимум в C - средне в M
В идеале один C о другом C не имеет представления и понятия вообще. Соотвественно чтобы все вертелось и крутилось без повторения кода нужно перебираться в M
Во V можно helpers использовать чтобы не повторяться (я себе почти для каждой модели делаю helpers)
Фраза Цитата: | чтобы Модель File с ее контроллерами можно было использовать и в других моделях | imho звучит так что видения MVC все еще в Вашей голове не сложилось
Про красоту читать про отношение моделей - иначе область слишком широкая о чем писать |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 15 Окт 2007 08:25:23 Заголовок сообщения: |
|
|
Да я разобрался, код повторяющийся для контроллеров должен быть в компанентах, а для view - хелперы... А в модели по идее не должно быть никакого кода, кроме-того, который отвечает за хранение данных, то есть за сами данные...
Вся обработка на уровне контроллеров...
Я пошел по пути использования компонент для контроллеров и оказалось очень удобно и компактно, на использование его в контроллере всего 1-2 строчки кода... А удобство огромное А еще, если нужно, чтобы все контроллеры имели доступ, к одной и той же функции, ее просто надо прописать в /app/app_controller.php |
|
Вернуться к началу |
|
|
marazmus
Зарегистрирован: 15 Окт 2007 07:45:04 Сообщения: 16
|
Добавлено: 15 Окт 2007 10:20:03 Заголовок сообщения: |
|
|
Пора формировать FAQ |
|
Вернуться к началу |
|
|
starosta
Зарегистрирован: 09 Окт 2007 15:25:31 Сообщения: 23
|
Добавлено: 15 Окт 2007 10:23:39 Заголовок сообщения: |
|
|
Согласен... Вот сделаю свой проект, который сейчас делаю на cakePHP... Тогда и забацаем... |
|
Вернуться к началу |
|
|
KPOTOB Гость
|
Добавлено: 15 Окт 2007 14:02:49 Заголовок сообщения: |
|
|
starosta писал(а): | А в модели по идее не должно быть никакого кода, кроме-того, который отвечает за хранение данных, то есть за сами данные...
Вся обработка на уровне контроллеров...
|
http://cakephp.org/files/OCPHP.pdf
Страница 3. В Вашем случае это Bad Cake! |
|
Вернуться к началу |
|
|
how
Зарегистрирован: 20 Окт 2007 15:56:51 Сообщения: 18 Откуда: Киев
|
Добавлено: 01 Ноя 2007 17:49:58 Заголовок сообщения: |
|
|
starosta писал(а): | Спасибо! Я думаю, что конечно это не самое красивое решение, но я решил попробывать передать данные через Session!
|
В таких случаях используется шаблон Singleton, Registry.
В Cake - это класс Configure. Его значения не сохраняются после завершения скрипта в отличии от сессии. _________________ Мой блог о CakePHP - PHP в SouthPark
http://php.southpark.com.ua |
|
Вернуться к началу |
|
|
|