Play Framework
sbt.bat
conf
public
cible
Paramètres de routage dans un fichier appelé routes
(Connectez la combinaison de type de demande et d'URL envoyée du client au serveur à la méthode du programme)
Lorsque vous accédez à la racine (localhost: 9000 par défaut) avec la méthode GET,
La méthode ʻindex de la classe
HomeController dans le dossier ʻapp / controllers
est appelée
conf/routes
GET / controllers.HomeController.index
↓
scala:app/views/index.scala.html
@()
@main("Welcome to Play") {
<h1>Welcome to Play!</h1>
}
Index de modèle d'appel par méthode d'index Exécutez la fonction principale. (Comme argument
scala:app/views/main.scala.html
*@
@(title: String)(content: Html)
<!DOCTYPE html>
<html lang="en">
<head>
<title>@title</title>
<link rel="stylesheet" media="screen" href="@routes.Assets.versioned("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png" href="@routes.Assets.versioned("images/favicon.png ")">
</head>
<body>
@content
<script src="@routes.Assets.versioned("javascripts/main.js")" type="text/javascript"></script>
</body>
</html>
Appeler main plus loin par l'index du modèle
Pour incorporer la variable passée dans Html, utilisez @variable name
.
Utilisez les informations décrites dans routes
routes
GET / controllers.HomeController.index
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
GET /viewtest controllers.ViewTestController.index #Je veux mettre un lien ici
En html
<a href="@routes.ViewTestController.index">view test</a>
Faire.
routes
, ce sont des contrôleurs. ~~`, Mais lorsque vous collez le lien, changez-le en routes. ~~Supposons que vous ayez un modèle comme celui-ci.
HTML:viewtest_index.scala.html
@(title: String="Fichier créé par moi-même")
@viewtest_main("Fichier créé par moi-même"){
<h1>@(title+"est")</h1>
}
J'essaie de recevoir une variable appelée title, mais comme la valeur initiale est définie, le contrôleur
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
@Singleton //Désignation de "tonne unique". Instruction selon laquelle "un seul objet peut être créé à partir de cette classe"
class ViewTestController @Inject()(cc: ControllerComponents)
extends AbstractController(cc) { // @Injectez l'instruction à l'intérieur du framework que "cc est fait avec le framework"
def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.viewtest_index())
}
}
Cette description est correcte.
pourtant
@(title: String="Fichier créé par moi-même")(rnum: Int = 1)
@viewtest_main("Fichier créé par moi-même"){
<h1>@(title+"est")</h1>
<p>La fin est@Grande chance pour rnum! !!</p>
De cette manière, si deux variables sont définies dans le modèle et qu'elles ont des valeurs initiales, dans le contrôleur, ** Vous devez dire que vous ne transmettez aucune valeur à l'une des deux variables et laissez la valeur par défaut **. Dans ce cas,
Ok(views.html.viewtest_index())
Non (une erreur se produit)
#### **`Ok(views.html.viewtest_index()())`**
De cette façon, vous devez écrire deux () (pour le nombre de variables) dans l'appel de méthode pour transmettre l'intention au programme.
En haut du modèle, dans @ (title: String =" File you created ") (rnum: Int = 1)
,
Le "views.html.viewtest_index () ()" du contrôleur correspond à cela.
Et même si vous spécifiez la valeur d'une variable à partir du contrôleur sans utiliser la valeur initiale, organisez deux () autant que le nombre de variables.
Ok(views.html.viewtest_index("Titre transmis par le contrôleur")(5))
Aussi, du côté du modèle, comment recevoir des variables
@ (title: String =" Fichier créé par moi-même ", rnum: Int = 1)
Si vous les mettez dans un () séparés par des virgules comme ceci, la manière de passer est également
ʻOk (views.html.viewtest_index ("titre transmis par le contrôleur", 5) `
De cette façon, il devient "écrire comme une fonction normale".
** Doit être utilisé correctement selon la situation ** Comment organiser ()
Parce qu'il a la particularité.
@(title: String= "pour la pratique de la boucle", topics: Array[String])
<ul>
@for(topic <- topics) {
<li>@topic</li>
}
</ul>
L'emplacement de @ est un peu déroutant.
Recommended Posts