MVC (Symfony) -- что куда?

Ragnarok
На сайте с 25.06.2010
Offline
208
1138

Есть код экшна контроллера:


/**
* @param Request $request
* @return Response
*/
public function uploadAction(Request $request)
{
$messages = [];
$filesOnServers = [];

//create entity
$file = new UserFile();

$form = $this->createForm(UserFileType::class, $file);
$form->handleRequest($request);

//standart validation
if ($form->isValid()) {

//get rules for file validation
$fileUploadRules = $this->container->getParameter( 'my_uploader_bundle.file_upload_rules' );

//file validation
$fileValidation = Upload::fileValidation($file, $fileUploadRules);
$fileIsValid = $fileValidation["fileValid"];
$messages = array_merge($messages, $fileValidation["messages"]);

if($fileIsValid) {
$em = $this->getDoctrine()->getManager();
$em->persist($file);
$em->flush();
$messages[] = "File was uploaded successfully";

//sending upload task to ftp
$serversToUpload = $this->container->getParameter( 'my_uploader_bundle.servers_list' );

foreach($serversToUpload as $server) {
//insert file upload info
$fileOnServer = new FilesOnServers();
$fileOnServer->setFilename($file->getSavedName());
$fileOnServer->setServer(serialize($server));
$fileOnServer->setStatus("NEW_FILE");
$fileOnServer->setDateUpdated(new \DateTime('now'));
$em->persist($fileOnServer);
$em->flush();

$fileIdOnServer = $fileOnServer->getId();

//send to rabbitmq
$msg = array(
'savedName' => $file->getSavedName(),
'path' => $file->getFile()->getPath(),
'server' => $server,
'fileOnServerId' => $fileIdOnServer);

$filesOnServers[] = $fileIdOnServer;

$this->get('old_sound_rabbit_mq.upload_file_producer')->publish(serialize($msg));
}
}
else {
$messages[] = "File didn't uploaded because of validation reasons";
}
}
else {
//some errors with form validation
}

return $this->render('MyUploaderBundle:Uploader:form.html.twig', array(
'form' => $form->createView(),
'messages' => $messages,
'filesOnServers' => $filesOnServers,
));
}

оно же с подсветкой синтаксиса

подозреваю, что как для контроллера тут чересчур много логики, следовательно, нужно вынести её в модель. Но что именно и куда?

//TODO: перестать откладывать на потом
CP
На сайте с 12.08.2009
Offline
101
#1

Структурность вообще вроде придумали, дабы расширять было удобно. Представьте что хотите что то поменять в вашем коде, понадобиться использовать часть кода в других местах, и другие действия связанные с изменением. И ответ к вам сам придёт.

Профессиональный frontend: JS, html,css, Single-Page App (/ru/forum/964386)
dimsog
На сайте с 08.08.2011
Offline
149
#2

У вас данные проверяются в модели формы $form, а потом вы их сохраняется после validate() обратно в контроллере. Вопрос зачем? Контроллер должен был передать данные в модель и получить от нее результат обработки этих данных. Так что смело переносите в форму

ihor vps -> ihc.ru
L
На сайте с 10.02.2015
Offline
128
#3

Не нагружайте модели без надобности.

А вообще, я против фреймворков:

http://blog.kpitv.net/article/frameworks-1/

CP
На сайте с 12.08.2009
Offline
101
#4
livetv:
Не нагружайте модели без надобности.
А вообще, я против фреймворков:
http://blog.kpitv.net/article/frameworks-1/

После строчки "Нету настроек для конкретной страницы." испугался вашего понимания фреймворков.

dimsog
На сайте с 08.08.2011
Offline
149
#5

livetv, написал полную чушь. Уже после Плохая документация и нету настроек для конкретной страницы можно не читать. Посмотрите доку к Laravel/Yii2 и убедитесь в этом.

А по-вашему бизнес логику стоит держать в контроллерах? Хотя не! Крутые программеры всю бизнес логику держат во вью. Только там.

CP
На сайте с 12.08.2009
Offline
101
#6
dimsog:
А по-вашему бизнес логику стоит держать в контроллерах? Хотя не! Крутые программеры всю бизнес логику держат во вью. Только там.

Да просто чел наверно не писал что то большое и нестандартное. Часто вижу такое явление у людей, которые пишут проекты, формата взять с базы и показать на страницы.

dimsog
На сайте с 08.08.2011
Offline
149
#7
Content-pro:
которые пишут проекты, формата взять с базы и показать на страницы.

и самое главное: это все должно быть на одной странице, а также запрос вида: SELECT * FROM users WHERE login = $_GET['login'] 🍿

ДП
На сайте с 23.11.2009
Offline
192
#8

Насколько я понимаю философию symfony - бизнес-логику (а вроде у вас тут это сохранение файлов) выносят в сервисы.

B
На сайте с 13.02.2008
Offline
238
#9

Термин MVC имеет разные толкования. Например, в джанго бизнес-логика заключается во views, правда там вьюхи не занимаются отображением информации, а занимаются формированием данных для отображения. Самим отображением там занимаются шаблоны. Поэтому вместо MVC еще используется термин MTV.

root
На сайте с 04.07.2006
Offline
196
#10

В контроллере обычно обработка хедеров, GET, POST переменных, выдача exceptions, рендер лейаута, само сохранение файла нужно в модуль выделить или компонент. В модели правила валидации.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий