Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где создать "многофункциональные методы" в CakePHP, Методы для удобства внутри контроллеров 
:(
    Опции темы
linuxoid
Дата 8.8.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте, коллеги!

Я как-то писал один PHP проект на легеньком framework'e. Там я для удобства использовал один большой статический класс, к примеру Helper::cancelMembership()
Этот метод было удобно вызывать, передавая лишь id юзера и группы (к примеру). Не нужно было инициализировать все соответствующие классы в контроллере, т.к. этим занимался метод Helper::cancelMembership()
Т.е. метод изменял и удалял записи из разных таблиц, удалял файлы и делал еще какую-то работу, для этого сам метод использовал другие методы в этом же Helper'e.
Таким образом в классе Helper я создал много методов, которые облегчили жизнь. Даже метод delete для какой-нибудь модели я делал в этом Helper'e, чтобы можно было просто вызвать к примеру Helper::deleteUser(26); Это чтобы не создавать внутри котнтроллера объект класса модели..

Возник такой вопрос: где в CakePHP можно создать что-то на подобии - такой же большой helper? Создать ли 1 helper на все случаи жизни или сделать несколько файлов в соответствии с классификацией.. В общем где это делается в каке. Благодарю.

Это сообщение отредактировал(а) linuxoid - 8.8.2011, 17:19
PM MAIL   Вверх
Absinthe
Дата 9.8.2011, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



правильнее так:
User::get(26)->delete();

То, что написано выше про класс Helper - это антипаттерн(заумный гoвнокод) blob.

Это сообщение отредактировал(а) Absinthe - 9.8.2011, 18:29
PM MAIL   Вверх
linuxoid
Дата 9.8.2011, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Ну тут ты конечно перегнул.. все вполне разумно. По идее, если все делать "правильно", то и статический класс нужно убирать.

1) Используется статический класс User::get(26)->delete();

А в моем хелпере это было бы так:

Код

    /**
     * Get user by provided id
     * 
     * @param int $user_id
     * @return array
     */
    public static function getUser($user_id)
    {
        $UserObj = new User();
        $UserObj->setId($user_id);
        $user = $UserObj->getUser();
        
      return $user;
    }   


Чем такой код лучше, чем твой (опять же, на мой взгляд)? Тем, что я в любой момент могу подставить вместо new User() к примеру new UserTest() и использовать совсем другой класс, а тебе придется свой класс Users изменять напрямую или менять все файлы, где ты его вызываешь.

2) User::get(26)->delete(); это круто и коротко, но только если ты сразу пишешь без багов и не собираешься ничего тестировать. Поэтому сначала лучше сделать get, а потом уже delete. Это чтобы удобнее и нагляднее читался код. 

3) Это просто и действительно очень удобно использовать.

P.S. Но я всегда готов учиться, так что если что поправляйте!

P.P.S. И все-таки хотелось бы услышать что-то по теме (CakePHP). Может быть это просто component (или несколько компонент в соответствии с функционалом)?

Это сообщение отредактировал(а) MoLeX - 10.8.2011, 05:26
PM MAIL   Вверх
Absinthe
Дата 10.8.2011, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 4.5.2011

Репутация: 5
Всего: 11



Я тебе задам три вопроса(относительно твоих пунктов), на которые ты сам ответишь:
1) Как устроен мой get? Что такое класс User?
2) Почему нет разницы?
3) Согласен. А где притензия?

Напоследок:
Цитата

Это чтобы не создавать внутри котнтроллера объект класса модели..
 И что, не создаются? Непереносимость слова new, но если оно спрятано в хелпер, то все хорошо?

Это сообщение отредактировал(а) MoLeX - 10.8.2011, 05:26
PM MAIL   Вверх
MoLeX
Дата 10.8.2011, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140




 ! 
MoLeX



Спокойнее надо, спокойнее!





--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
linuxoid
Дата 10.8.2011, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Я согласен в том, что лучше использовать разные хелперы для разных целей. К примеру User, Group, Membership и т.д. Цель - не забивать на тысячи строк 1 файл (и то - в NetBeans или любом другом IDE это не проблема). В некоторых книжках может быть это и "неправильно" (использовать хелперы таким образом). И для меня это не единственный путь, но вполне приемлемый, легко читаемый, легко расширяемый, легко обновляемый и удобный вариант + никаких проблем с объяснением другим, что и как. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.