javascript — передача массива в контроллере и действия из Zend Framework в location.href extjs

Я делаю проект с бэкэндом, созданным с помощью Zend Framework, и с фронтендом, созданным с помощью extjs.

Моя проблема заключается в том, что после того, как пользовательская сеточная панель загружена и я нажимаю значок редактирования, чтобы редактировать пользователя, я не могу использовать location.href чтобы перенаправить в раздел редактирования, потому что я не знаю, как отправить информацию об идентификаторе пользователя так, как это делает контроллер Zend Framework.

это строка кода у меня есть

location.href = "< ? php echo $this->url(array('controller'=>'index','action'=>'edit','id'=>$id)) ?>";

эта строка кода находится внутри actionColumn в пути php. У меня есть функция с extjs, чтобы взять идентификатор пользователя, которого я хочу редактировать, но я не знаю, как сохранить его в $id переменная php

0

Решение

Кажется, есть неправильное представление. С Javascript вы не можете передавать переменные в php. В ExtJ, более того, все делается в клиенте, и вы должны загружать данные асинхронно через ajax.

Теперь в ExtJs не имеет смысла загружать новую страницу с сервера для редактирования строки в сетке. Если вы все сделали правильно, эта сетка привязана к магазину, который содержит данные пользователей. После того, как вы отредактировали его, вы сохраните изменения на сервере.

Теперь ответим на ваш вопрос: в обработчике столбца действия текущая запись передается функции. См док

handler: function (view, row, column, item, e, record) {
$id = record.getId()
}

$ id теперь является идентификатором пользователя.

0

Другие решения

Спасибо за ответ, Лоренц. да, я понимаю, что вы имеете в виду, JS выполнить в клиенте. да, данные находятся в хранилище, и эти данные загружаются с использованием ajax-прокси из некоторого URL-адреса с базовым заголовком авторизации. таким образом я фиксирую значение id,

<script>

var store = Ext.create('Ext.data.Store', {
//model: 'Contactos',
//pageSize: 25,
autoLoad: true,
proxy: {
type: 'ajax',
url:  'https://app.alegra.com/api/v1/contacts/',
method: 'GET',
reader: {
type: 'json',
rootProperty: 'data',
id: 'id'
},
headers: {
Accept : 'application/json',
Authorization: 'Basic something'
}
}
});
Ext.create('Ext.grid.Panel',{
title: 'Contactos',
id: 'cat_categoriesGrid',
store: store,
// bbar: pagingToolbar,
columns: [
{ text: '#', dataIndex: 'id', width: 35 },
{ text: 'Nombre', dataIndex: 'name', width: 210},
{text: 'Identificacion', dataIndex: 'identification',width: 210},
{text: 'Telefono 1', dataIndex: 'phonePrimary',width: 210},
{text: 'Observaciones', dataIndex:'observations',width: 210},
{
text: 'Acciones',
width: 210,
xtype: 'actioncolumn',
items: [{
icon: '<?php echo $this->baseUrl('image/page_edit.png');?>', // Use a URL in the icon config
tooltip: 'Edit',
handler: function(grid, rowIndex, colIndex, a, b, c) {
var rec = grid.getStore().getAt(rowIndex);

var id = rec.get('id');

location.href = "<?php echo $this->url(array('controller'=>'index','action'=>'edit','id'=>$id)) ?>";
}
},
{
icon: '<?php echo $this->baseUrl('image/delete.png');?>', // Use a URL in the icon config
tooltip: 'Delete',
handler: function(grid, rowIndex, colIndex, a, b, c) {

}
},

]
}
],
width: 1100,
style: 'margin:0 auto;margin-top:15px;',
enableColLock:false,
//selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
renderTo: Ext.getBody()
});

в extJS и да, часть редактирования должна перенести меня на новую страницу и загрузить данные, которые я буду редактировать, но что я не знаю, как? У меня есть контроллер ZEND, и я не знаю, как достичь его с помощью extjs, моя идея заключалась в том, чтобы повторить строку выше внутри обработчика, чтобы я мог получить эту новую страницу, но я не могу поместить «var id» внутри этого эха. Так что, если я не могу этого сделать, как мне добраться до контроллера Zend Framework из extjs?

это мой контроллер на Zend F

class IndexController extends Zend_Controller_Action
{

public function init()
{

}

public function editAction()
{

// action body
$id = $this->getRequest()->getParam('id');
$client = new Zend_Http_Client('https://app.alegra.com/api/v1/contacts/'.$id);
$client->setAuth('admin', 'password');

//se solicita un request con los parametros que se estan pasando en client
$a = $client->request('GET');
$b = strstr($a, '{');
$json_alegra = substr($b,0, -5);

//Se pasa de json a array
$phpNative = Zend_Json::decode($json_alegra); //$phpNative = json_decode($json_alegra, true);

//$this->view->response = $a;

$this->view->form = new Application_Form_Alegraform();
//usamos populate para llenar el formulario con el array $phpNative
//las variables del array deben cooncordar con las del form
$this->view->form->populate($phpNative);
$this->view->form->setAction($this->view->
url(array('controller'=>'index','action'=>'update','id'=>$id)));

}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector