控制器

未匹配的标注

控制器是大部分业务逻辑所在之处,也是你处理响应的地方。响应可以是字典、列表(list)、视图(view)或者其他任何可以渲染响应的类。

介绍

你可以使用 craft 命令创建新的基础控制器,或者也可以手动创建新的控制器。控制器是指带有将方法映射到路由的类。

你的路由可能像这样的:

Route.get('/', 'WelcomeController@show')

此例中,路由会调用 WelcomeController 类的 show 方法。

要通过 craft 命令创建一个基础控制器,只需运行这一命令:

$ python craft controller Welcome

此处就会快速帮你创建好一个新的控制器类。这个控制器类会像这样:

from masonite.controllers import Controller
from masonite.views import View

class WelcomeController(Controller):
    def show(self, view: View):
        return view.render("")

现在,你可以开始构建控制器并添加你需要的响应内容了。

请注意,该控制器继承了 Masonite 基础的 Controller类。此处要求 Masonite 在路由中接收你的控制器类。

依赖注入

控制器中的构造方法和普通方法都由 Masonite 的服务容器反射解析。因此你可以在构造方法或者普通方法中使用类型提示引入大部分 Masonite 的类:

def __init__(self, request: Request):
  self.request = request

  #..

def show(self, request: Request):
  return request.param('1')

查看更多关于服务容器的信息。

响应

控制器可以基于你的的实际需要返回不同类型的响应。

JSON

如果你想要返回 JSON 响应,你可以返回字典或者列表:

def show(self):
  return {"key": "value"}

这将会返回 application/json 类型的响应。

字符串

你可以返回字符串:

def show(self):
  return "welcome"

视图

如果你像要返回视图(View),你可以解析视图类并使用 render 方法:

def show(self, view: View):
  return view.render("views.welcome")

模型

如果你使用了 Masonite ORM,你可以直接返回模型:

from app.User import User
#..

def show(self, response: Response):
  return User.find(1)

重定向

如果你想要返回一个重定向,你可以解析 Response 类并使用它的 redirect 方法:

def show(self, response: Response):
  return response.redirect('/home')

其他

你也可以返回任何包含 get_response() 方法的类。该方法需要返回以上其中任何一个响应类型。

请求参数

如果你的路由中有参数,你可以通过指定控制器的方法中的参数来获取它:

Route.get('/users/@user_id', 'UsersController@user')

因为 id 参数在路由之中,我们可以通过指定控制器方法中的命名参数来获取这一参数:

def show(self, user_id):
  return User.find(user_id)

另一个能够获取路由参数的方法是,通过Request类:

from masonite.request import Request

def show(self, request: Request):
  return User.find(request.param('user_id'))

控制器目录

Masonite 可以在注册的控制器目录中使用字符串绑定,接入控制器(继承 Controller 类)。

默认注册的控制器目录是 app/controllers,在项目 Kernel.py 配置文件中对其进行了定义:

self.application.bind("controllers.location", "app/controllers")
# ...
Route.set_controller_locations(self.application.make("controllers.location"))

设置目录

你可以通过在 Kernel.py 文件中编辑默认绑定的 controllers.location,重写注册的控制器目录。

添加路径

你可以使用 add_controller_locations 添加多个额外的控制器目录:

from masonite.routes import Route

Route.add_controller_locations("app/http/controllers", "other_module/controllers")

做这件事最好是在 Kernel.py 文件的 register_routes() 方法中。

注意:你应该在注册路由之前就绑定目录,否则注册路由会因为 Masonite 不能解析控制器类而失败。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~