2012-10-28 23 views
7

Được đặt sẵn khung nội dung Yesod mặc định, với tệp tải lên được triển khai bằng cách di chuyển tệp đã tải lên vào thư mục static, làm cách nào để liên kết đến tệp trong thư mục tĩnh? Đối với các tệp tĩnh bình thường, mối nối staticFiles sẽ tạo một số nhận dạng mà tôi có thể tham chiếu, nhưng đối với các tệp do người dùng tải lên rõ ràng là tôi không thể mã hóa các số nhận dạng này. Tôi có thể làm điều này bằng tay bằng cách sử dụng một mối nối #{}, nhưng tôi đã hy vọng có thể có thứ gì đó an toàn hơn một chút, thậm chí thành phần có thể kiểm tra duy nhất là tôi đã sử dụng tiền tố static/ chính xác.Liên kết tới tệp tĩnh trong Yesod không có mã định danh Haskell

Trả lời

8

staticFiles tạo một nhóm số nhận dạng có loại Route Static. Thật không may, Haddock không hiển thị các thông tin về gia đình loại liên quan, vì vậy bạn không thể nhìn thấy các nhà xây dựng trong các tài liệu, nhưng các nhà xây dựng chỉ có sẵn là StaticRoute:

https://github.com/yesodweb/yesod/blob/master/yesod-static/Yesod/Static.hs#L142 

Hai trường là những thông tin đường dẫn và tham số chuỗi truy vấn. Vì vậy, để tạo ra một liên kết đến /static/foo/bar?baz=bin, bạn có thể sử dụng:

StaticRoute ["foo", "bar"] [("baz", "bin")] 

thường tạo ra một tham số chuỗi truy vấn là không cần thiết, nhưng staticFiles sẽ sử dụng nó để chèn một giá trị băm cho các mục đích sửa bộ nhớ cache.

+0

Phụ lục quan trọng: vì tĩnh là một site con, để thực sự nhúng liên kết ứng dụng của bạn, bạn sẽ cần phải bọc StaticRoute với StaticR (hoặc bất kỳ hàm tạo nhúng nào của trang con của bạn). Nhưng nếu không, nó hoạt động rất tốt. –

Các vấn đề liên quan