我有这个程序,我需要处理一个文本文件。 为了让用户选择一个文件,我正在使用它:
<?php echo $this->Form->file('prodfile'); ?>
,它提供了一个浏览器按钮和一个带有所选文件路径的输入。
用户浏览文件后,单击我的链接以触发该方法。
如何将'prodfile'输入的字符串值添加到链接中?:
<?php echo $this->Html->link(__('Process File'), array('controller' => 'qcas', 'action' => 'loadProdFromFile', 'dataFile' => $this->data['Project']['prodfile'], 'dirId' => $dirs['id']), null, __('Please confirm you want to Load Production from File for Dir %s?', $dirs['dir_dataname'])); ?>
试过前者,但由于我没有提交表单,'prodfile'上的值没有到达控制器。
如何将此文件输入的字符串值传递给控制器? (只需要解析字符串并在控制器上构建合法的路径)。
更新:我目前正在努力实现这一目标,但如果有人可以建议采用不同的方法,请做。
你能帮忙吗?
非常感谢!
答案 0 :(得分:0)
没有ajax,使用javascript我已经设法传递字符串(文件的完整路径),通过触发链接上的参数解析到服务器。
1.-用户选择文件
<?php echo $this->Form->file('prodfile', array('onchange' => "getFile();")); ?>
(getFile() only saves current href on my links - step 3-)
2.-用户手动将完整路径复制到文本输入中。 (不是优雅但解决了我的问题)。
echo $this->Form->input('Project.fullPathInput', array('label' => 'Copied Path', 'id' => 'fullPath', 'onchange' => "assignPath();"));
(assignPath() updates href on all my original links with the fullpath -since I don't know which one the user will click-
3.-这是原始链接(其中一些是dinamically创建的
echo $this->Html->link(__('LFF'), array('controller' => 'qcas', 'action' => 'loadProdFromFile', 'dirId' => $dirs['id']), array('name' => 'lff', 'id' => 'lff' . $i));
function getFile() {
document.getElementById('fullPath').value = '';
var sHref = document.getElementsByName('lff');
var len = sHref.length;
// only the first time, save original hRef
if ( preValues.length == 0) {
for (var i=0; i<len; ++i) {
preValues[i] = sHref[i].href;
}
} else {
for (var i=0; i<len; ++i) {
sHref[i].href = preValues[i];
}
}
}
function assignPath() {
var finalPath = document.getElementById('fullPath').value;
var sHref = document.getElementsByName('lff');
var len = sHref.length;
for (var i=0; i<len; ++i) {
sHref[i].href = sHref[i].href + '/filePath:'+finalPath;
}
}
只是想分享某人面对类似的事情。
实际上我使用jQuery ajax重新编写了整个内容但没有用户选择文件。 (作为用户的第二个选项)。