📜  FuelPHP-控制器(1)

📅  最后修改于: 2023-12-03 15:00:51.655000             🧑  作者: Mango

FuelPHP 控制器

FuelPHP 是一个基于 PHP 的开源 Web 应用框架,控制器是 FuelPHP 中的一个重要组成部分,其中用于管理应用程序中的请求和响应。

什么是控制器

控制器是应用程序的请求处理器,是一个类,其中包含处理应用程序请求和响应的方法。

控制器接受外部请求并将请求分配给相应的处理方法。一旦处理方法完成了所要求的任务,它将创建和维护视图,最后把响应发送回客户端。

控制器的基本语法

控制器是一个 PHP 类,通常保存在 app/classes/controller/ 目录中。

以下是一个基本的控制器示例:

<?php

class Controller_HelloWorld extends Controller
{
    public function action_index()
    {
        echo 'Hello, world!';
    }
}

其中,Controller_HelloWorld 继承了 FuelPHP 的基础控制器 Controller,并且定义了一个 action_index 方法,用于处理请求。

控制器的路由

FuelPHP 中的路由规则将 URL 映射到控制器操作。默认情况下,FuelPHP 会将 http://example.com/controller/action 映射到 Controller_Controller/action_index

以下是一个路由定义的示例:

<?php

// app/config/routes.php

return array(
    'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
);

其中,hello(/:name)? 是路由规则匹配的 URL,welcome/hello 是定义的控制器名称和操作名称,name 是路由参数。

控制器工作流程
  1. 用户请求 URL。
  2. FuelPHP 框架分析和解释请求。
  3. 根据请求的路由规则匹配到相应的控制器和操作。
  4. 调用控制器的操作方法。
  5. 操作方法完成任务后,调用视图来呈现数据。
  6. 输出呈现的视图到用户端。
如何创建控制器

要创建一个控制器,可以使用以下步骤:

  1. 创建一个 PHP 类,继承 Controller
  2. 编写声明操作方法的类方法。
  3. 根据需要实现操作。该操作可以使用模型和视图来实现。

以下是一个更完整的示例:

<?php

class Controller_Blog extends Controller
{
    public function action_index()
    {
        $data['posts'] = Model_Post::find_all();
        $this->response->body = View::forge('blog/index', $data);
    }

    public function action_view($id = null)
    {
        is_null($id) and Response::redirect('blog');

        $data['post'] = Model_Post::find_by_pk($id);

        $this->response->body = View::forge('blog/view', $data);
    }

    public function action_create()
    {
        if (Input::method() == 'POST') {
            $post = Model_Post::forge(array(
                'title' => Input::post('title'),
                'body'  => Input::post('body'),
            ));

            if ($post and $post->save()) {
                Response::redirect('blog');
            }
        }

        $this->response->body = View::forge('blog/create');
    }

    public function action_edit($id = null)
    {
        is_null($id) and Response::redirect('blog');

        $post = Model_Post::find_by_pk($id);

        if (Input::method() == 'POST') {
            $post->title = Input::post('title');
            $post->body = Input::post('body');

            if ($post->save()) {
                Response::redirect('blog');
            }
        } else {
            $data['post'] = $post;
            $this->response->body = View::forge('blog/edit', $data);
        }
    }

    public function action_delete($id = null)
    {
        is_null($id) and Response::redirect('blog');

        if ($post = Model_Post::find_by_pk($id)) {
            $post->delete();
            Response::redirect('blog');
        } else {
            Response::redirect('blog');
        }
    }
}

在此控制器中,包含 5 个操作方法,用于完成博客的常见操作:显示所有文章、显示特定文章、创建文章、编辑文章和删除文章。

参考资料