Hi Aconran,
In fact, all my url is created dynamicly to manage routing.
To do this:
- I defined a property usingRouting=true for url dynamic
- I use FOS JS which calls Symfony route.
- I implemented the code below :
Code:
// APPEL ////////////////////////////////////////////////////////////////////////////////////
proxy: {
type: 'ajax',
usingRouting: true,
api: {
read: {
name: 'personne_documentsReglementairesDetails',
buidFromParams: false,
useFilter: true,
params: {
_format: 'json'
}
},
create: undefined,
update: undefined,
destroy: undefined
},
reader: {
type: 'json',
idProperty: 'numLigne',
root: 'documentReglementairesDetail'
}
}
Code:
////////////////////////////////////////////////////////////////////////////////////
// PROXY POUR GERER LE FOS JS ROUTING
// Surcharge le proxy pour tenir compte de FOS JS Routing
// On cherche à introduire des paramètres dans la propriété 'api' du proxy
// afin de fournir les arguments d'appel de la méthode Routing.generate()
Ext.define('Pegase.ProxyServerOverride', {
override: 'Ext.data.proxy.Server',
getUrl: function(aRequest)
{
if( this.usingRouting )
{
var iUrlDesc= this.api[aRequest.action];
if( Ext.isObject(iUrlDesc) )
{
var iDataParams= Ext.apply({}, aRequest.params);
var iQueryParams= iDataParams;
if( iUrlDesc.useFilter )
{
iQueryParams= {};
Ext.each(aRequest.operation.filters, function(aFilter)
{
this[aFilter.property]= aFilter.value;
}, iQueryParams);
}
var iUrlParams= Ext.apply({}, iUrlDesc.params, iQueryParams);
if( iUrlDesc.useRecord )
{
Ext.applyIf(iUrlParams, aRequest.operation.records[0].data);
}
Ext.Object.each(iUrlDesc.mapping || {}, function(aQueryParamName, aDataParamName)
{
this[aQueryParamName]= iDataParams[aDataParamName];
}, iUrlParams);
return Routing.generate(iUrlDesc.name, iUrlParams);
}
}
return this.callParent(arguments);
},
constructor: function()
{
this.callParent(arguments);
if( this.usingRouting )
{
Ext.Object.each(this.api, function(aActionName, aActionParams, aApis)
{
if( Ext.isObject(aActionParams) )
{
if( Ext.isArray(aActionParams.mapping) )
{
var iMapping= aActionParams.mapping;
aActionParams.mapping= {};
Ext.each(iMapping, function(aMapping)
{
this[aMapping.toRequest]= aMapping.fromData;
}, aActionParams.mapping);
}
else if( !!aActionParams.buidFromParams )
aApis[aActionName]= Routing.generate(aActionParams.name, aActionParams.params);
}
});
}
}
});
Thanks for your help
Alain.