我在kohana写了一个样本控制器
<?php
defined('SYSPATH') OR die('No direct access allowed.');
class Controller_Album extends Controller {
public function action_index() {
$content=$this->request->param('id','value is null');
$this->response->body($content);
}
}
但是当我试图点击网址时http://localhost/k/album?id=4 我得到NULL值。 如何使用request-&gt; param访问kohana中的请求变量,而不使用$ _GET和$ _POST方法?
答案 0 :(得分:24)
在Kohana v3.1 + Request类中有query()
和post()
方法。他们既是吸气者又是二传手:
// get $_POST data
$data = $this->request->post();
// returns $_GET['foo'] or NULL if not exists
$foo = $this->request->query('foo');
// set $_POST['foo'] value for the executing request
$request->post('foo', 'bar');
// or put array of vars. All existing data will be deleted!
$request->query(array('foo' => 'bar'));
但请记住,设置GET / POST数据不会使当前的$ _GET / $ _ POST值超载。它们将在请求执行后发送($request->execute()
)。
答案 1 :(得分:4)
在Konana(3.0)中,您无法通过Request类访问$ _GET / $ _ POST。你必须直接使用$ _GET / $ _ POST
$this->request->param('paramname', 'defaultvalue')
用于访问路线中定义的参数。对于<controller>/<action>/<id>
之类的路线网址,您可以使用$this->request->param('id')
访问路径网址中的部分。
编辑:在Kohana 3.1中,有post
和query
方法来获取/设置请求的数据;查看http://kohanaframework.org/3.1/guide/api/Request
答案 2 :(得分:1)
请注意,尽管使用$ this-&gt; request-&gt; param()更清楚,但您可以将操作参数定义为:
public function action_index($id, $seo = NULL, $something = NULL)..
直接访问这些变量。你必须按照它们在相应路径中定义的相同顺序定义这些变量(不包括动作和控制器参数,它们在请求级别上定义,因此不需要将它们传递给动作方法)。
编辑:此功能在3.1中已弃用,已从3.2中删除,因此最好避免使用。您可以在此处阅读更多内容:http://kohanaframework.org/3.2/guide/kohana/upgrading#controller-action-parameters
答案 3 :(得分:0)
如果我记得很清楚,如果您没有更改默认路线,可以尝试使用该控制器的网址http://localhost/k/album/4。
由于默认路线的格式为:/<controller>/<action>/<id>
希望它有所帮助。