Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit WebModuleU;
- interface
- uses
- System.SysUtils,
- System.Classes,
- Web.HTTPApp,
- MVCFramework,
- FireDAC.Stan.Intf,
- FireDAC.Stan.Option,
- FireDAC.Stan.Error,
- FireDAC.UI.Intf,
- FireDAC.Phys.Intf,
- FireDAC.Stan.Def,
- FireDAC.Stan.Pool,
- FireDAC.Stan.Async,
- FireDAC.Phys,
- FireDAC.Phys.MySQL,
- FireDAC.Phys.MySQLDef,
- FireDAC.VCLUI.Wait,
- Data.DB,
- FireDAC.Comp.Client,
- FireDAC.Stan.Param,
- FireDAC.DatS,
- FireDAC.DApt.Intf,
- FireDAC.DApt,
- FireDAC.Comp.DataSet;
- type
- TMyWebModule = class(TWebModule)
- FDQuery1: TFDQuery;
- FDConnection1: TFDConnection;
- procedure WebModuleCreate(Sender: TObject);
- procedure WebModuleDestroy(Sender: TObject);
- private
- FMVC: TMVCEngine;
- public
- { Public declarations }
- end;
- var
- WebModuleClass: TComponentClass = TMyWebModule;
- ConnectionDefinitionName: string = '';
- implementation
- {$R *.dfm}
- uses
- System.IOUtils,
- MVCFramework.Commons,
- MVCFramework.ActiveRecordController,
- MVCFramework.ActiveRecord,
- FDConnectionConfigU, CustomControllerU;
- procedure TMyWebModule.WebModuleCreate(Sender: TObject);
- begin
- FMVC := TMVCEngine.Create(Self,
- procedure(Config: TMVCConfig)
- begin
- // enable static files
- Config[TMVCConfigKey.DocumentRoot] := TPath.Combine(ExtractFilePath(GetModuleName(HInstance)), 'www');
- // session timeout (0 means session cookie)
- Config[TMVCConfigKey.SessionTimeout] := '0';
- // default content-type
- Config[TMVCConfigKey.DefaultContentType] := TMVCConstants.DEFAULT_CONTENT_TYPE;
- // default content charset
- Config[TMVCConfigKey.DefaultContentCharset] := TMVCConstants.DEFAULT_CONTENT_CHARSET;
- // unhandled actions are permitted?
- Config[TMVCConfigKey.AllowUnhandledAction] := 'false';
- // default view file extension
- Config[TMVCConfigKey.DefaultViewFileExtension] := 'html';
- // view path
- Config[TMVCConfigKey.ViewPath] := 'templates';
- // Enable Server Signature in response
- Config[TMVCConfigKey.ExposeServerSignature] := 'true';
- // Define a default URL for requests that don't map to a route or a file (useful for client side web app)
- Config[TMVCConfigKey.FallbackResource] := 'index.html';
- end);
- // ********************************************************************
- // Just register other controllers before TMVCActiveRecordController with
- // compatible paths. The router will works as usual.
- // ********************************************************************
- FMVC.AddController(TCustomPeopleController, '/api/entities/people');
- FMVC.AddController(TCitiesController, '/api/cities');
- FMVC.AddController(TContriesController, '/api/countries');
- // ********************************************************************
- // As last controller, register TMVCActiveRecordController.
- // ********************************************************************
- FMVC.AddController(TMVCActiveRecordController,
- function: TMVCController
- begin
- Result := TMVCActiveRecordController.Create(
- function: TFDConnection
- begin
- Result := TFDConnection.Create(nil);
- Result.ConnectionDefName := ConnectionDefinitionName;
- end,
- function(aContext: TWebContext; aClass: TMVCActiveRecordClass; aAction: TMVCActiveRecordAction): Boolean
- begin
- if aContext.LoggedUser.IsValid then
- begin
- Result := True;
- end
- else
- begin
- Result := True; // not(aAction in [TMVCActiveRecordAction.Delete]);
- end;
- end);
- end, '/api/entities');
- end;
- procedure TMyWebModule.WebModuleDestroy(Sender: TObject);
- begin
- FMVC.Free;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement