控制器
控制器是大部分业务逻辑所在之处,也是你处理响应的地方。响应可以是字典、列表(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 不能解析控制器类而失败。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
 
           Masonite 中文文档
 Masonite 中文文档 
         
         
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号