-
Notifications
You must be signed in to change notification settings - Fork 4
Controller
简而言之,一个控制器就是一个类文件,是以一种能够和 URI 关联在一起的方式来命名的。
考虑下面的 URI:
http://example.com/Blog/
上例中,Kotori.php 将会尝试查询一个名为 Blog.php 的控制器并加载它。
当控制器的名称和 URI 的第一段匹配上时,它将会被加载。
接下来你会看到如何创建一个简单的控制器,打开你的文本编辑器,新建一个文件 Blog.php , 然后放入以下代码:
use Kotori\Core\Controller;
class Blog extends Controller {
public function index()
{
echo 'Hello World!';
}
}
然后将文件保存到 app/controllers 目录下。
现在使用类似下面的 URL 来访问你的站点:
如果一切正常,你将看到:
Hello World!
另外,一定要确保你的控制器继承了父控制器类,这样它才能使用父类的方法。
方法 上例中,方法名为 index() 。"index" 方法总是在 URI 的 第二段 为空时被调用。 另一种显示 "Hello World" 消息的方法是:
example.com/index.php/blog/index/ URI 中的第二段用于决定调用控制器中的哪个方法。
让我们试一下,向你的控制器添加一个新的方法:
use Kotori\Core\Controller;
class Blog extends Controller {
public function index()
{
echo 'Hello World!';
}
public function comments()
{
echo 'Look at this!';
}
}
现在,通过下面的 URL 来调用 comments 方法:
http://example.com/Blog/comments/
你应该能看到你的新消息了。
如果你的 URI 多于两个段,多余的段将作为参数传递到你的方法中。
例如,假设你的 URI 是这样:
http://example.com/Products/shoes/sandals/123
你的方法将会收到第三段和第四段两个参数("sandals" 和 "123"):
use Kotori\Core\Controller;
class Products extends Controller {
public function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
重要 如果你使用了 URI 路由 ,传递到你的方法的参数将是路由后的参数。
为了配合URL格式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,内置提供了url方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。
推荐在任何时候都使用这种方法来生成你的 URL ,这样在你的 URL 变动时你的代码将具有可移植性。
传给函数的 URI 段参数可以是一个字符串,也可以是个数组,下面是字符串的例子:
$this->route->url('News/local/123');
上例将返回类似于:
http://example.com/News/local/123
下面是使用数组的例子:
echo $this->route->url(array('news', 'local', '123'));
用于返回JSON格式的数据。
调用示例:
$array['name'] = 'MahuaTeng';
$array['length'] = 1;
$this->response->throwJson($array);
301/302跳转到某页面
调用示例:
$this->response->redirect('http://www.qq.com',true);//跳转到马化腾首页
//根据第二个参数来判断是301还是302跳转
在Web开发过程中,我们经常需要获取系统变量或者用户提交的数据,这些变量数据错综复杂,而且一不小心就容易引起安全隐患,但是如果利用好框架P提供的变量获取功能,就可以轻松的获取和驾驭变量了。
示例:
$id = $this->request->input('get.id'); // 获取get变量
$name = $this->request->input('post.name'); // 获取post变量
$value = $this->request->input('session.var'); // 获取session变量
$name = $this->request->input('cookie.name'); //获取cookie变量
$file = $this->request->input('server.PHP_SELF'); // 获取server变量
$get = $this->request->input('get.') //获取$_GET数组
让我们先创建一个简单的控制器,打开你的文本编辑器,新建一个文件并命名为 Tools.php,然后输入如下的代码:
use Kotori\Core\Controller;
class Tools extends Controller {
public function message($to = 'World')
{
echo "Hello {$to}!".PHP_EOL;
}
}
现在你可以通过类似下面的 URL 来访问它:
example.com/index.php/tools/message/to
或者,我们可以通过 CLI 来访问。在 Mac/Linux 下你可以打开一个终端,在 Windows 下你可以打开 “运行”,然后输入 "cmd",进入项目所在的目录。
$ cd /path/to/project;
$ php index.php tools message
如果你操作正确,你应该会看到 Hello World!
。
$ php index.php tools message "John Smith"
这里我们传一个参数给它,这和使用 URL 参数是一样的。"John Smith" 被作为参数传入并显示出:
Hello John Smith!
当你的系统发生错误时,将输出错误页面。 如果你打开了APP_DEBUG模式,将在视图右下角现实Trace信息,方便进行错误、SQL调试。 如果你需要自定义错误模板,请参照views/Public/error.html自行修改。 需要注意的是关闭APP_DEBUG后将不再显示错误信息。