Възпроизвеждане на рамка Scala

И така, нека да видим какво е игра.

Моля, извинете ме за потребителите на Windows, но тъй като имам Debian, ще предоставя решения за потребителите на Unix. Надявам се, че разбирате.

Имаме всичко готово, можете да започнете да създавате приложението. В този урок ще създадем просто приложение за задачи.

възпроизвеждане

възпроизвеждане

Въведение в Play и Scala (частично)

Време е да видите какво е генерирано от „play new todolist“ Ако използвате идея, спрете сървъра (Ctrl+D) и въведете

Сега, след като имаме всички необходими модули за създадена идея, можем да отворим нашия проект в IDE (тази стъпка е само за потребители на Intellij Idea). Виждаме структурата на проекта:

рамка

Най-важните папки за нас са app (където са всички MVC компоненти) и conf (с конфигурацията на приложението и маршрутите). Ако вече сте запознати с MVC, тогава можете да експериментирате малко. Но първо, нека разберем защо, когато отидем на localhost:9000, виждаме непразна страница. Отидете на conf/routes, вижте там:

Въз основа на това отиваме на app/controllers/Application.scala:

Каква е тази магическа линия в def index, която ни позволява да видим страница, пълна с информация. Нека да го разберем. Но първо искам да обясня (за тези, които не са запознати със Scala). Тип запис

означава, че функцията връща действие (това е част от рамката, няма да навлизаме в дълбочина; просто ще кажа, че действието обработва заявката и изпраща отговор на браузъра). Да, и още. Както може би сте забелязали, точката и запетая не са задължителни в Scala (само ако пишете няколко израза на един ред, например:

). Сега нека се заемем с низа

Първо, всеки израз врокът има свое собствено значение. Така функцията индекс връща стойността на този единствен ред. Второ: нека анализираме самия низ. Функцията „Ok“ създава отговор „200 OK“, изпълнен с html съдържание от изглед, наречен index.scala.html (изгледи по подразбиране в игра на езика на шаблона на Scala; можете да използвате haml или нещо подобно, ако искате). Нека отворим app/views/index.scala.html:

Първият ред тук е сигнатурата на функцията. И след това можете да напишете html код със scala вмъквания (които започват със символа @). Сега можете да стартирате сървъра в режим на разработка отново и да експериментирате малко, но преди да продължите, отменете всички промени.

Развитие на събитията

И сега ще започнем да създаваме приложение за задачи.

Първа стъпка: Маршрути & контролер

Първо, нека конфигурираме файла conf/routes:

Освен стандартните сме добавили още 4 маршрута. Те ще ни позволят да преглеждаме работни места (първо), да създаваме работни места (второ), да изтриваме задания (трето) и да направим задание завършено (четвърто).

Сега за всеки път трябва да създадем действия в app/controllers/Application.scala:

Нека сега опитаме да стартираме сървъра и да видим какво ще се случи.

Отиваме на localhost:9000/tasks и виждаме:

рамка

Малко отклонение: не искаме потребителите на нашето приложение да виждат страницата, генерирана от функцията за индексиране на контролера за действие, така че ще направим малки промени в контролера (app/controllers/Application.scala):

Функцията Redirect ще ни пренасочи към

Стъпка втора: Модел

Както вече забелязахте, папките за контролери и изгледи са генерирани и ще трябва да създадем папката за модели ръчно. В основата на приложението от конзолата:

Сега нека създадем файл Task.scala в него. Той ще стане нашмодел. И така app/models/Task.scala:

Моля, обърнете внимание на записа

е еквивалентен на този запис в java:

Сега нека се отклоним малко от модела и да преминем към

Трета стъпка: Изгледи

Променете съдържанието на файла app/views/index.scala.html на:

Обръщам внимание на:

В първия ред добавихме 2 параметъра към подписа: списък със задачи и „някаква странна“ форма на задача. Ще говорим за това малко по-късно. Следва импортирането. Трябва да се отбележи, че записът в scala "import helper._" е подобен на записа в java "import helper.*". Това импортиране ни предоставя функция за формуляр, която създава етикет с атрибутите за действие и метод, и функция inputText, която създава няколко полета: въвеждане за въвеждане, етикет, обясняващ какво да въведете, и още етикети, които съобщават за грешки. Всички други записи след @ според мен са интуитивни.

Нека да преминем към "неизвестната" форма на задача. Нека направим някои модификации във файла app/controllers/Application.scala:

    Нека добавим няколко импортирания за роботи с формуляри:

Нека направим самата taskForm:

Четвърта стъпка: всички заедно

Време е да продължим работата по главната страница (която показва списък с всички случаи, както и форма за добавяне на случаи).

Вече сме направили шаблон за него (app/views/index.scala.html). Сега трябва да модифицираме контролера и модела. Ще започнем с контролера:

  • добавете импортиране на модел към контролера
  • завърши с определени задачи

Това, което предаваме на views.html.index(), е това, което предаваме на функцията, чийто подпис е на първия ред на файла index.scala.html. Сега можете да проверите резултатите от нашата недовършена работа. Отворете localhost:9000/tasks във вашия браузър и ако сте направили всичко както трябва, ще видите:

scala

Можете да опитате да щракнете върху бутона „Създаване“, но все още не сме написали def newTask и все още нямаме база данни за съхраняване на информация. Първо, нека завършим def newTask, който ще обработва данните от формуляра taskForm:

    Първо, нека добавим няколко импортирания (за датата)

а сега нека напишем самата функция newTaks

За човек, който не е запознат със Scala, синтаксисът на този код ще бъде труден за разбиране, така че просто ще обясня какво прави. От заявката получаваме данните от формуляра, които обработваме (с функцията bindFromRequest.fold(). Ако има грешки в заявката, тогава се изпълнява функцията BadRequest, която спира процеса, връща ни на главната страница и показва всички грешки. След това трябва да обработим както самата задача (етикет), така и този, който е създал идеята (кой). И също така намираме времето за създаване (обърнете внимание, че не се изпраща с формуляра, а само записва времето за създаване на задачата) и извикваме функцията Task.create(). Подобно на функцията Task.all, скоро ще я добавим към файла app/models/Task.scala. Е, сега, когато всичко е създадено, пренасочваме потребителя към главната страница.

Време е за достъп до базата данни.

Какво ни остава да правим?Свържете се с базата данни, добавете методите на модела и контролера. Нека да разгледаме базата данни.

Сега е моментът да отворите страницата localhost:9000/tasks в браузър. Трябва да видите тази снимка:

html

Play откри нашата еволюция и иска да я осъществи.Щракнете върху „Прилагане на този скрипт сега“.За да „комуникираме“ с базата данни, ще използвамеanormза преобразуване на необработения JDBC ResultSet в стойност на задача. Нека започнем с добавяне на импортиране:

Сега нека добавим основния код:

Тукзадачадейства като анализатор за стойностите, които ще получим от JDBC ResultSet Сега, след като анализаторът е написан, можем безопасно да продължим да се свързваме с базата данни. Нека добавим импортиране:

И сега завършваме всички функции, създаваме, изтриваме и допълваме:

Както виждаме, ние използваме писмения анализатор само във функцията all. Обърнете внимание, че използваме DB.withConnection за директно свързване към базата данни и използваме SQL функциятаAnormза създаване на заявката.

Сега можете да създавате случаи. Опитайте да отидете на localhost.9000/tasks и да създадете някои задачи. Но все още не можете да изтриете или завършите делата.

Остават няколко докосвания. Нека довършим малко файла app/views/index.scala.html. Ето кода:

Поздравления! Ако сте следвали статията честно, вече имате напълно работещо приложение. Заедно със случаите може да изглежда така:

рамка

Сега нека да преминем към внедряването на приложението. Ще използвам git и heroku. Но първо трябва да създадете Procfile в корена на приложението (в папката todolist):

Също така променете project/Build.scala:

Това трябва да се направи, защото използвахме базата данни H2, а на heroku базата данни е PostgreSQL. И накрая, можем да преминем към директно внедряване (трябва да имате инсталиран и регистриран heroku на heroku.com), ако не:

Нека да обобщим. Днес се запознахме с езика за програмиране Scala (не всички, разбира се), с рамката Play. Дали да го използвате или не зависи от вас. С прост пример показах колко лесни са за използване. Бих искал всеки, който прочете тази статия, да започне да използва придобитите знания и да ги развива.Пишете в scala сиграй!

Полезни връзки: