libera: Enter будет работать в любом текстовом поле (TextBox, например). А если у вас нет текстовых полей, или хотите обрабатывать Enter и вне полей, то создайте событие KeyDown у окна, и в нём пишите, что хотите (правда, нужно проверить, какая клавиша была нажата).
Tsiren Naimanov: но вопрос же от новичка, а не от профи. Поэтому я так и писал выше. А в гуглах слишком много фигни, поэтому люди и спрашивают совета, что лучше почитать.
Я сам преподаватель, учу студентов как раз C# (в основном), и я знаю, как новичку важно найти хорошую книгу.
Tsiren Naimanov: тем новички и отличаются от продвинутых, что они не умеют выделять важное и неважное. Поэтому, я считаю, что новичку неполезно читать эти книги. Тем более, что есть книги именно для новичков, начиная от Фленова.
Книга Троелсена очень классная. Но она предназначена для профессионалов, а не для новичков. Она даст много про C#, но очень мало про вообще программирование, про ООП и про другое, что каждый программист должен знать. Поэтому, новичку книгу Троелсена я не буду советовать.
А вот Рихтера я не читал, но много слышал. Расскажите про неё, пожалуйста. Хороша ли для новичков? рассказывает про общие понятия программирования? Типа переменные, типы данных, какие типы лучше взять для переменной, и т.п.
Во-первых, по поводу второго бандла. Имеет смысл делать второй бандл, если вы в него хотите сделать общую вещь, которую можно будет переиспользовать в другом проекте. Например, сделать бандл RobokassaBundle. А иначе делать отдельный бандл смысла не очень много. (хотя некоторые любят разделять бандлы на назначению функций - для клиентов, для админов, системные функции)
Во-вторых. Нет никакой разницы - GET или POST запрос. Проблема в архитектуре этого модуля. Используйте второй контроллер, и всё тут. Сделайте для робокассы отдельную форму. Это ведь будет отдельный запрос. А если нужно передать в этот запрос данные из другого запроса (хоть этот запрос и был только что, полсекунды назад - но это ведь другой запрос), то сохраните данные в базу данных (или в мемкеш/редис) и во второй запрос передавайте их id.
Не старайтесь много всего сделать кучу разных вещей в одном запросе. Сделали что-то (обработка POST-запроса) - сделайте редирект на другую страницу, в которой напишите - "всё сделали, спасибо".
не "request этой формы", а полученная сущность, так? Вы ведь форму используете для поулчения сущности из запроса?
Я тогда не понял, что за второй контроллер. Он будет вызываться подзапросом (subrequest)? тогда в тот экшен второго контроллера передавать параметром функции.
Максим Савичев: а тут только один данной вариант - создавать в первом контроллере форму в отдельном методе, потом во втором контроллере создавать первый контроллер, и из него вызывать метод создания формы. Но это гораздо хуже. Контроллер - это не место для создания публичных методов. Если нужно использовать что-то в нескольких местах (в том числе, формы), то нужно создавать как сервис.
В Symfony вообще в контроллере нужно стремиться как можно меньше делать кода (кроме обработки самого запроса), а код бизнес-логики переносить в отдельный сервис (даже если используется только в одном экшене одного контроллера). Я в контроллере даже доктрину не использую, минимум - вызываю репозиторий.
я вспомнил, почему у меня такой сложный код для add_block - у меня были разные группы сущностей для разных ролей пользователей, и поэтому стандартный сонатовский код этого блока мне не подходил. А если все сущности доступны для всех, то там всё просто было.
В бандле LexikMaintenanceBundle есть консольные команды для включения/отключения режима обслуживания. Эти команды можно вызывать и из контроллера (написав нужные экшены в контроллере).
Если включение обслуживающего режима вы будете делать самостоятельно (упрощённо описано в статье, что я привёл), то нужно написать контроллер, и в нём менять состояние режима обслуживания. В статье предложено состояние хранить в параметрах config.yml, но это будет неудобно - эти параметры нельзя изменить программно (разве что костыльно вручную изменять файл конфига), поэтому состояние удобнее будет хранить в БД (например, с помощью моего бандла LexxpavlovSettingsBundle). Кстати, если вам нужно оставить возможность входить админам, то в сервисе из статьи нужно дополнительно проверить роль залогиненного пользователя.
e-hot: в 2.3 уже нет метода getDefaultOptions(), то есть, ваши настройки в этом методе не работают. Переходите на использование setDefaultOptions() :
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\AppBundle\Entity\Oldemand',
));
}
1alexandr: Хм, интересный вопрос. У меня нет специального метода для проверки существования настройки,потому что я подразумевал, что случайных настроек не будет - они вначале создаются, а потом используются. То есть, когда нужно получить настройку, уже известно её имя, и значит, что она уже создана.
Проверить можно, если настойка в категории, тогда при получении $settings->group('group_name') возвращается ассоциативный массив, и в нём можно проверить наличие настройки с помощью isset(). Но для чего это может понадобиться - я не могу придумать. Если расскажете, для чего это может быть полезно, то я могу добавить метод проверки наличия настройки.
1alexandr: спрашивайте, если что-то будет непонятно. И если пригодится, то отпишитесь, пожалуйста. Я создавал вопрос для отзывов - Каких функций у бандла не хватает?
Вы ведь используете сонату?..