Php 如何在HP中扩展URL上的参数?

Php 如何在HP中扩展URL上的参数?,php,url,parameters,kohana,kohana-3,Php,Url,Parameters,Kohana,Kohana 3,如何将URL中的额外参数传递给KohanaPHP(版本3.1+),就像这样 http://example.com/blog/edit/4000/3200 …其中“blog”是controllers文件夹中的blog.php,“edit”是控制器方法,4000是参数1,我可以用于谁想要编辑记录,3200是参数2,我可以用于记录ID 我得到博客并编辑部分。问题是4000和3200。当我运行该URL时,我得到一个错误:“404-找不到路由匹配blog/edit/4000/3200” 我是被迫对.ht

如何将URL中的额外参数传递给KohanaPHP(版本3.1+),就像这样

http://example.com/blog/edit/4000/3200
…其中“blog”是controllers文件夹中的blog.php,“edit”是控制器方法,4000是参数1,我可以用于谁想要编辑记录,3200是参数2,我可以用于记录ID

我得到博客并编辑部分。问题是4000和3200。当我运行该URL时,我得到一个错误:“404-找不到路由匹配blog/edit/4000/3200”


我是被迫对.htaccess文件执行一些不寻常的操作,还是在问号后将参数作为查询参数传递?

这说明了该怎么做:

但本质上,我需要编辑application\bootstrap.php文件并更改以下内容:

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index'
    ));

在bootstrap.php中需要这样的路由:

Route::set('blog_edit', 'blog/edit/<param1>(/<param2>)')
        array(
            'param1' => '[[:digit:]]{1,}',
            'param2' => '[[:digit:]]{1,}',
        ))
    ->defaults(array(
        'controller' => 'blog',
        'action'     => 'edit',
    ));
我还没有测试过这段代码,但它应该非常接近您所需要的


引用自“”

.htaccess
。PHP无法拦截请求,因此您需要Apache(或其他Web服务器)帮助将请求定向到相应的PHP文件。@Blender。您知道HP MVC框架吗?它已经使用了一个.htaccess文件,该文件将所有流量定向到index.php进行处理。所以这个问题是一个Kohana框架问题,而不是一个普通的PHP问题。我很难理解你的问题。你能不能把它说得更清楚一点,因为在目前的状态下,它是相当模糊的。嗯?默认情况下,在我看来,Kohana允许我检测并路由URL中的“博客”和“编辑”。但对于4000和3200,它不会让我。真正有过Kohana经验的人可能知道这个答案。我可能不得不对前端控制器或其他东西进行子类化。由于您没有得到很多视图(只有九个),我不确定如何提供帮助。每当我使用web框架(我使用Flask)时,每当我在URL中使用输入时,我都必须指定输入的类型。应用程序似乎无法识别整数,但字符串可以工作。我以前从未使用过这个框架,所以我真的能帮上忙…请不要在控制器的方法中使用arg list。它将在v3.2中被弃用。改用
$this->request->param('param1')
。另一件事是在正则表达式中。如果您的param1和param2是整数,请将它们定义为整数:
Route::set('defaults','…',array('param1'=>'\d+','param2'=>'\d+')。另外,为什么要通过URI传递userID?通常,您可以从会话(或类似于
Auth::instance()->get_user()
)获取用户数据,并从
defaults()
调用中删除param1和param2
$this->request->param()
为空段返回NULL。@blakaveron“为什么用户ID通过URL?”这是一个假设的,但很可怜的例子,我当时在脑海中能想到。请忽略它。重点实际上是传递URL参数。@biakaveron我做了其他建议的更改。非常感谢。至于param1和param2是整数——我需要它们灵活并存储任何数据类型。我可以在控制器操作中验证它们的值。
public function action_edit() {
  $sParam1 = $this->request->param('param1');
  $sParam2 = $this->request->param('param2');
  $this->response->body('param1=' . $sParam1 . ' param2=' . $sParam2);
}
Route::set('blog_edit', 'blog/edit/<param1>(/<param2>)')
        array(
            'param1' => '[[:digit:]]{1,}',
            'param2' => '[[:digit:]]{1,}',
        ))
    ->defaults(array(
        'controller' => 'blog',
        'action'     => 'edit',
    ));
class Controller_Blog
{
    public function action_edit($param1, $param2)
    {
        // or
        $param1 = $this->request->param('param1');
        $param2 = $this->request->param('param2');
        // [...]
    }
}