Using your proxy definition, I managed to get it working. I am not sure why this does not work for you. I just moved the ZendRest space to Prj.proxy and added requires: ['Prj.proxy.ZendRest'] to the model.
the code:
// controller/Primary.js Ext.define('Prj.controller.Primary', { extend: 'Ext.app.Controller', stores: ['Articles'], models: ['Article'], views: ['article.Grid'] }); // model/Article.js Ext.define('Prj.model.Article', { extend: 'Ext.data.Model', fields: [ 'title', 'author', { name: 'pubDate', type: 'date' }, 'link', 'description', 'content' ], requires: ['Prj.proxy.ZendRest'], proxy: { type: 'zest', url: 'feed-proxy.php' } }); // store/Articles.js Ext.define('Prj.store.Articles', { extend: 'Ext.data.Store', autoLoad: true, model: 'Prj.model.Article' }); // proxy/ZendRest.js Ext.define('Prj.proxy.ZendRest', { extend: 'Ext.data.proxy.Ajax', alias : 'proxy.zest', appendId: true, batchActions: false, buildUrl: function(request) { var me = this, operation = request.operation, records = operation.records || [], record = records[0], format = me.format, reqParams = request.params, url = me.getUrl(request), id = record ? record.getId() : operation.id; if (me.appendId && id) { if (!url.match(/\/$/)) { url += '/'; } url += 'id/' + id; } if (format) { reqParams['format'] = format; } /* <for example purpose> */ //request.url = url; /* </for example purpose> */ return me.callParent(arguments); } }, function() { Ext.apply(this.prototype, { actionMethods: { create : 'POST', read : 'GET', update : 'PUT', destroy: 'DELETE' }, /* <for example purpose> */ reader: { type: 'xml', record: 'item' } /* </for example purpose> */ }); });
Here the sample works, and here the encrypted code.