[Gambas-user] Use gb.web.form in a web project with not only web forms
Benoît Minisini
gambas at ...1...
Mon Aug 8 20:35:33 CEST 2016
Le 26/07/2016 18:26, Tobias Boege a écrit :
> Hi Benoit,
>
> I have some projects using gb.web.form now and in every of these I have the
> requirement not only to load webforms but also a webpage or to implement
> some other URL schema to generate or serve a ressource.
>
> As I see it, gb.web.form wants to take complete control over the project's
> Main() routine (correct me if I'm wrong here), whereas my projects require
> some analysis of the request path in their Main() such as:
>
> Select Case Mid$(Request.Path, 2)
> Case "favicon.png"
> sPath = Server.DataDir &/ "favicon.png"
> If Exist(sPath) Then
> Response.SendFile(sPath)
> Else
> Response.SendFile("default.png")
> Endif
>
> Case Like "data:*" ' server data
> Response.SendFile(Server.DataDir &/ Mid$(Request.Path, 7))
>
> Case Like "?*:*" ' possibly user data, might also be /lib:0.0.1.js from gb.web.form
> ' Note that this URL is not protected by the session
> With Scan(Mid$(Request.Path, 2), "*:*")
> If Users.Exist(.[0]) Then
> Users[.[0]].SendFile(.[1])
> Else
> Goto _Default
> Endif
> End With
>
> Case "upload"
> ' ...
>
> :
> : ' Other special URLs and URL schemata
> :
>
> Case "" ' root
> If CheckSession() Then Return
> Home.Run()
>
> Default
> _Default:
> ' XXX: This is a hack to get gb.web.form data and to pipe its javascript
> ' magic through.
> With Scan(Request.Path, "/*/*")
> If .Count Then
> Try Class.Stat(.[0])
> If Error Then
> Request.Path = "/" &/ File.Name(Request.Path)
> Endif
> Endif
> End With
> WebForm.Main()
> End Select
>
> I have to serve data from a preconfigured server directory, generate some
> data on-the-fly, send project-internal data or serve webforms. As you may
> be able to tell, the Default case handles gb.web.form integration into the
> control flow and it's not pretty.
>
> Do you have any idea?
>
> Regards,
> Tobi
>
Yes, the idea of gb.web.form requires taking entire control of the URL
at the moment.
Maybe adding a call to a "HandleRequest" (or another name) public method
during the Main function would be enough for you?
--
Benoît Minisini
More information about the User
mailing list