Phoenix Framework

祁永嘉
2023-12-01

Phoenix 是一个web开发框架,写入Elixir中它执行的是服务器端模型-视图-控制器(MVC)模式。许多它的组件和概念看起来和我们熟悉的其他web框架相似,比如Ruby 写的Rails 或是 python的Django框架。
Phoenix提供了一个两全齐美的方案:高效的开发生产力和高效的应用性能。Phoenix还提供了全新的特性:像channels 可以提供实时交互的功能,预编译模版提供更高的速度。

hello_web

  • Phoenix.endPoint: endpoint包含了所有请求都要经过的公共和初始路由。如果你想要在所有的请求上都添加上某些操作,请添加到此文件
  • Phoenix.router: router负责分配动作/路径到控制器。router允许我们定义单独的功能区域;例如:我们的应用中有部分页面需要用户验证,其他的则不需要。
  • Phoenix.Controller: controller的功能是检索请求的信息,并与业务层交互,给展示层准备数据。
  • Phoenix.View:view是处理从controller获取到的结构化数据,并且将数据转化成文稿展现给用户。

Routing

Router路由是Phoenix应用中最主要的总线。他可以匹配HTTP请求到controller actions,连通实时频道处理,并且还给一些路由定义了一系列的管道转换域。
路由模块名称的定义方式为应用的名字作为前缀+Web+.Router

一条路由的书写方式:
Http操作 路由, 控制器, :action

使用$ mix phx.routes命令可以查看应用中定义的所有路由。

resource定义路由

使用resource定义路由,可以定义一个标准的路由矩阵,格式为
resource 路由,控制器,resource还可以嵌套定义

scope "/", HelloWeb do
  pipe_through :browser

  get "/", PageController, :index
  resources "/users", UserController
  ...
end
# 执行mix phx.routes 打印的resource的结果
...
user_path  GET     /users           HelloWeb.UserController :index
user_path  GET     /users/:id/edit  HelloWeb.UserController :edit
user_path  GET     /users/new       HelloWeb.UserController :new
user_path  GET     /users/:id       HelloWeb.UserController :show
user_path  POST    /users           HelloWeb.UserController :create
user_path  PATCH   /users/:id       HelloWeb.UserController :update
           PUT     /users/:id       HelloWeb.UserController :update
user_path  DELETE  /users/:id       HelloWeb.UserController :delete
...

Pipelines

Pipelines是一组可以被关联上特殊作用域的插件;
Routes 被定义在 scopes 作用域内并且这个作用域可以穿越多个管道。一旦一个路由被匹配,Phoenix将会调用这个路由关联的所有 pipelines 插件。例如:访问 /将会通过 :browser 管线,于是会调用虽有的插件。
Pipeline默认定义了2种类型,:browser:api,他们可以被一系列的基本的任务应用。我们可以根据自身的需求创建我们自己的 pipelines

The :browser:api pipelines

像browser和api的名字一样,:browserpipeline是为应用在响应浏览器端渲染请求的路由而准备的,:api pipeline是为响应产品数据 API 请求而准备的

Forward

Phoenix.Router.forward/4宏可以被用于,将所有的以某个特殊路径开头的请求都发送到一个特殊的插件上。

 类似资料:

相关阅读

相关文章

相关问答