【问题标题】:Codeigniter: Pass form variable into URICodeigniter:将表单变量传递到 URI
【发布时间】:2010-01-03 21:44:31
【问题描述】:

不确定这是否可以完成,但似乎我的主要问题是因为我有一个默认路由到一个名为“index”的方法。我希望能够列出所有用特定关键字标记的用户。此外,用户还可以根据这些关键字搜索其他用户。

即 www.domain.com/tags/apples www.domain.com/tags/oranges www.domain.com/tags/blueberry

如果我手动访问 URL,它可以正常工作。我在让它与表单域一起工作时遇到问题。

form_open 的片段:

<?=form_open('tags/');?>

<p>Search for Tag: <input type="text" name="tag" /></p>    
<p><input type="submit" value="Search" /></p> 

这是我的控制器的 sn-p:

function index() {
    $data['result'] = $this->tags_model->searchByTag($this->uri->segment(2));
    $this->load->view('tags_view', $data);
} 

这是我的路由器的 sn-p:

$route['tags'] = "tags/index";
$route['tags/(:any)'] = "tags/index/$1"; 

现在,如果我有一个名为 search 的方法,我可以轻松解决所有这些问题,但我不希望 URL 显示为 www.domain.com/tags/search/orange。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    当您创建表单时,您将其设置为使用 POST 变量而不是 GET,这样它们就不会通过 url,这是 codeigniter 的默认表单方法。

    所以你的 form_open 代码会生成如下代码:

     <form method="post" action="tags/" />
    

    如果您希望他们通过 url,请以这种方式调用表单打开器:

    form_open('tags/', array('method' => 'get'));
    

    这同样适用于您要为表单指定的任何其他属性,只需在数组中遵循相同的模式attribute_name =&gt; attribute_value

    有关user guide的更多信息

    【讨论】:

    • 好的,这似乎做了以下... tags?tag=orange ...我如何让它“重写”?
    • 我得到一个 404 页面找不到。哎哟
    【解决方案2】:

    这里的问题是您的表单会将其所有数据提交到“/tags”,没有任何尾随,因为 POST 数据不会作为 URL 的一部分出现。然而,即使它是一个 GET 请求,我认为 CodeIgniter 不会从查询字符串中取出任何内容并将其用作路由段的一部分。

    我认为您应该做的是具有一个小的JavaScript函数,该功能会自动更新 action参数为 tags/&lt;select option value&gt;,每当更改选择值时。这样它将提交到正确的位置。为了处理不支持 JavaScript 的浏览器,您可以使用名为 tags/search 的默认操作,它会简单地分析您的表单数据,并在您弄清楚后将 301 重定向到正确的tags/&lt;location&gt;

    然而,这似乎有点矫枉过正,因为您可以将表格指向tags/index 而不必担心。我不确定搜索引擎会索引表单提交位置,即使他们这样做了,他们肯定不会索引以您希望的方式提交到动态 URI 的表单。您仍然可以使用tags/apples 等链接到搜索结果页面,但只需转到tags/index,表单就可以正常工作。

    【讨论】:

      【解决方案3】:

      我最终重定向了 URL 并将关键字传递到 URI。

      即domain.com/tags/view/

      【讨论】:

        猜你喜欢
        • 2010-09-18
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多