32

特定の静的ファイルへのルートを作成しようとしていますが、試行しているすべてがエラーで終了します。

私は3つの異なる試みをしました:

1.1。

GET /file   staticFile:/public/html/file.html

私が得るエラー:

Compilation error
string matching regex `\z' expected but `:' found

2.2。

GET /file   controllers.Assets.at(path="/public/html", "file.html")

私が得るエラー:

Compilation error
Identifier expected

3.3。

GET /file   controllers.Assets.at(path="/public/html", file="file.html")

私が得るエラー:(そしてこれは最も奇妙です)

Compilation error
not enough arguments for method at: (path: String, file: String)play.api.mvc.Call. Unspecified value parameter file.

3番目のエラーの奇妙な部分は、次の行の別のファイル(app / views / main.scala.html)にスローされることです。

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">

これらのメソッドはすべて、stackoverflowの公式ドキュメントやスレッドで見つかりました。ここで何が欠けていますか?

ありがとう。

4

9 に答える 9

19

IIRC、変更

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/", "main.css")">

私はあなたの3回目の試みについて話している

また、余分な/に注意してください

編集

GET /assets/main.css    controllers.Assets.at(path="/public", file="/stylesheets/main.css")

リソースが /public/stylesheets/main.css にあると仮定します

于 2012-03-21T20:27:13.610 に答える
13

これが正しいかどうかは完全にはわかりませんが、これは、画像、JavaScriptなどを含むパブリックフォルダーをマップするために使用しているものです。

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)
于 2012-08-02T02:21:02.880 に答える
13

私が知っているように、この能力はまだ追加されていません。ただし、回答が必要な場合は、オプションとして、これらの目的のためにヘルパー コントローラーを作成できます。

object StaticFile extends Controller {

  def html(file: String) = Action {
    var f = new File(file)

    if (f.exists())
      Ok(scala.io.Source.fromFile(f.getCanonicalPath()).mkString).as("text/html");
    else
      NotFound
  }

}

そして、ルート構成で

GET     /               controllers.StaticFile.html(file = "public/index.html")
于 2012-12-26T14:52:47.670 に答える
10

これに対する最もクリーンな解決策は、静的ページを構築する独自の AssetsBuilder を作成することです。

コントローラ パッケージにこのファイルを作成します - Static.scala

package controllers

object Static extends AssetsBuilder

次に、ルートで静的エンドポイントを定義できます

GET /file   controllers.Static.at(path="/public/html", "file.html")

終わり。のファイルは/public/html/file.htmlから提供されますlocalhost:9000/file

上記のハードコードをより一般的なものに置き換えると:

GET /*file   controllers.Static.at(path="/public/html", *file + ".html")

その後、/fooサーブ/public/html/foo.htmlします、/barサーブします/public/html/bar.htmlなど。

于 2013-08-14T15:36:34.300 に答える
5

3 回目の試みはほぼ正しかった。それ以外の

GET /file   controllers.Assets.at(path="/public/html", file="file.html")

このようにしてください

GET /file   controllers.Assets.at(path="/public", file="html/file.html")

私は以前に同じ問題を抱えていました。私のルートファイルは次のようになります。

# Application
GET /       controllers.Assets.at(path="/public/html", file="static.html")
GET /exmpl  controllers.Examples.index

# Resources
GET /assets/*file  controllers.Assets.at(path="/public", file)

そして、ビュー内の逆ルートの下にあります( examples.scala.html)

@routes.Assets.at("imagefolder")   #try to generate path to /public/imagefolder.

開くhttp://localhost:9000/exmplと、このエラーが表示されました。

not enough arguments for method at: (path: String, file: String)play.api.mvc.Call. Unspecified value parameter file.

この問題を解決するために、このルートを変更しました

GET /     controllers.Assets.at(path="/public/html", file="static.html")

これに

GET /     controllers.Assets.at(path="/public", file="html/static.html")

この解決策は私にとってはうまくいきました。あなたや他の人にも役立つことを願っています。

于 2013-09-01T15:31:34.313 に答える
4

まったく同じ問題があります。@Jamil のアドバイスに従い、これを静的ファイル (私の場合はファビコン) で機能させることができ、テンプレートをコンパイルすることができましたが、ビューを使用しようとすると実行時に新しいエラーが発生しました。以下の関連コード、

ルートに変更します (このルートは正しく解決されるようになりました)

GET     /favicon.ico                controllers.Assets.at(path="/public/images", file="favicon.png")

ビューに変更 (コンパイル)

<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/","main.css")">

新しいエラー (実行時のみ)

[MatchError: (stylesheets/,main.css) (of class scala.Tuple2)]

// @LINE:29
// @LINE:28
def at(path:String, file:String) = {
   (path, file) match {
// @LINE:28
case (path, file) if path == "/public" => Call("GET", "/assets/" + implicitly[PathBindable[String]].unbind("file", file))

これが答えではないことはわかっていますが、おそらく誰かが答えを出すことができるでしょう。

于 2012-08-01T23:13:18.423 に答える
3

追加のCSSを構成しようとしたときに、同じ問題が発生していました。「routes」ファイルでこの構文を使用しました

  GET   /css/*file                      controllers.Assets.at(path="/public/css", file)
于 2012-05-27T21:41:23.033 に答える
1

私は同じ問題に遭遇しました。controllers.Assets.at次のようなルートに1秒追加すると

GET  /assets/*file   controllers.Assets.at(path="/public", file)
GET  /assets2/*file  controllers.Assets.at(path="/public2", file)

@routes.Assets.atmain.scala.htmlのデフォルトの呼び出しはコンパイルに失敗しました

Compilation error
not enough arguments for method at: (path: String, file: String)play.api.mvc.Call. Unspecified value parameter file.

これは、複数の一致するオブジェクトがある暗黙のパラメーターが原因のようです。解決策は、先頭の位置パラメーターを追加することです。

href="@routes.Assets.at("/public","/css/main.css")"

残念ながら、ルートにアセット行が 1 つしかない場合は、コンパイル エラーを回避するために 1 パラメータ形式に変更する必要があります。私にはバグのようです。

于 2013-05-23T23:25:09.353 に答える