url - CodeIgniter:通过 URL 传递变量 - 使用 GET 的替代方法

标签 url codeigniter variables get

我是 CodeIgniter 的新手,刚刚发现使用 GET 方法通过 URL 传递变量的困难(例如 domain.com/page.php?var1=1&var2=2)。

我认为一种方法是在 URI 段中传递变量,但还没有完全弄清楚如何做到这一点,因为它似乎在 Controller 中创建了一个名为特定 URI 段的函数的期望???

无论如何,我决定不使用 GET,而是通过修改带有隐藏输入字段中的变量的提交按钮(伪装成链接)来使用 POST。我创建了以下似乎工作正常的解决方案,但我想知道我在这里是否走在正确的轨道上,或者是否有更简单的方法通过 CodeIgniter 中的链接传递变量?

我在 application/libraries/中创建了以下类

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_variables {

function variables_via_link($action, $link_text, $style, $link_data) {
    $attributes = array('style' => 'margin:0; padding:0; display: inline;');
    echo form_open($action, $attributes);
    $attributes = array('class' => $style, 'name' => 'link');
    echo form_submit($attributes, $link_text);
    foreach ($link_data as $key => $value){
        echo form_hidden($key, $value);
    }
    echo form_close();
 }
}
?>

使用以下 CSS:
/* 
SUBMIT BUTTON AS LINK
adapted from thread: http://forums.digitalpoint.com/showthread.php?t=403667
Cross browser support (apparently).
*/
.submit_as_link {
background: transparent;
border-top: 0;
border-right: 0;
border-bottom: 1px solid #00F;
border-left: 0;
color: #00F;
display: inline;
margin: 0;
padding: 0;
    cursor: hand /* Added to show hand when hovering */
}

*:first-child+html .submit_as_link {  /* hack needed for IE 7 */
border-bottom: 0;
text-decoration: underline;
}

* html .submit_as_link {    /* hack needed for IE 5/6 */
border-bottom: 0;
text-decoration: underline;
}

然后在 VIEW 中使用以下代码创建链接:
<?php
$link = new C_variables;
$link_data=array('var1' => 1, 'var2' => 2);
$link ->variables_via_link('destination_page', 'here is a link!', 
'submit_as_link', $link_data);
?>

谢谢你的帮助...

最佳答案

老实说,创建​​一个表单来执行超链接的工作有点语义上的不。

默认情况下,Codeigniter 完全删除任何 $_GET参数。因此,如果不在配置中启用查询字符串,您将无法执行以下操作:

http://my-domain.com/script/?param=1&param2=foo



对于初学者来说,基于段的 URL 有点学习曲线,但很快就会有意义。 Stack Overflow 是基于分段的 URL 在实践中如何工作的一个很好的生产示例!

因此,如果您想在 codeigniter 中使用以下 URL 复制 Stack Overflow 的问题查看页面:

eg; http://stackoverflow.com/questions/2728978/codeigniter-passing-variables-via-url-alternatives-to-using-get



在您的默认 Controller 中创建以下方法:
public function questions()
{
  $question_id = $this->uri->segment(2);

  // now do something with our question_id
}

第三部分(问题标题段)被有效地忽略。但是你可以通过以下方式捕获它:
$question_title = $this->uri->segment(3);

更多信息 here .

如果您不喜欢必须使用第一个 URI 段在 Controller 中命名方法的想法。您可以在路由配置中创建自定义路由。

因此,假设您创建了一个名为 questions_controller.php 的 Controller 。 ,并有一个方法叫做 show_question_by_id() .保留/questions/1234/some-text-here样式 URI 但使用上面的 Controller /方法处理它,您可以创建以下路由:
$route['question/(:num)'] = "questions_controller/show_question_by_id/$1";

更多信息 here .

如果您希望在您的 URL 中有无限数量的参数,或者不知道期望什么参数,例如mysite.com/my_page/param1/12/param2/foo/param3/bar/param4/baz/another-param/xyz-123
您可以使用 $this->uri->uri_to_assoc(1) 将它们拆分为关联数组。获取以下内容的URI方法:
  [array]
(
    'param1' => '12'
    'param2' => 'foo'
    'param3' => 'bar'
    'param3' => 'baz'
    'another-param' => 'xyz-123'
)

然后,您可以完全像使用 $_GET 数组一样处理此问题。然后,您可以将这种方法与自定义路由结合起来,为您提供几乎任何您喜欢的 URI 和应用程序结构。您还可以获得自动清理每个参数和段的好处。这是一个学习曲线,开始时看起来像是额外的工作,但实际上非常灵活,可以帮助您构建结构良好的应用程序。

关于url - CodeIgniter:通过 URL 传递变量 - 使用 GET 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728978/

相关文章:

java - FileSystemResource : java. io.FileNotFoundException

html - 如何使用相对 URI 转到子目录

jquery - PhoneGap、jQuery Mobile 和 Codeigniter

php - 在 CodeIgniter 中找不到错误类 Controller

javascript - 将多个变量传递给函数以添加/删除类 Jquery/Javascript

css - 在 .CSS 文件中创建一个变量以在该 .CSS 文件中使用

java - 使用 Java 处理 URL 中的特殊字符

php - 如何获取已存储在服务器上的图像的 URL

php - Codeigniter:构造部分 View 的最佳方式

java - 在方法中更改数组会在外部更改数组