Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 菲尼克斯有没有办法定义自定义路线?_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 菲尼克斯有没有办法定义自定义路线?

Elixir 菲尼克斯有没有办法定义自定义路线?,elixir,phoenix-framework,Elixir,Phoenix Framework,假设我想创建一个resources,在其中添加一些自定义操作,rails中的类似功能是: resources :tasks do member do get :implement end end 这将使我不仅返回7条标准路线,而且返回1条新路线: GET /tasks/:id/implement 如何在phoenix中执行此操作?您可以在do块的resources中添加get web/router.ex $mix phoenix.routes task_path

假设我想创建一个
resources
,在其中添加一些自定义操作,rails中的类似功能是:

resources :tasks do
  member do
    get :implement
  end
end
这将使我不仅返回7条标准路线,而且返回1条新路线:

GET /tasks/:id/implement

如何在phoenix中执行此操作?

您可以在
do
块的
resources
中添加
get

web/router.ex
$mix phoenix.routes

     task_path  GET     /tasks                     MyApp.TaskController :index
     task_path  GET     /tasks/:id/edit            MyApp.TaskController :edit
     task_path  GET     /tasks/new                 MyApp.TaskController :new
     task_path  GET     /tasks/:id                 MyApp.TaskController :show
     task_path  POST    /tasks                     MyApp.TaskController :create
     task_path  PATCH   /tasks/:id                 MyApp.TaskController :update
                PUT     /tasks/:id                 MyApp.TaskController :update
     task_path  DELETE  /tasks/:id                 MyApp.TaskController :delete
task_task_path  GET     /tasks/:task_id/implement  MyApp.TaskController :implement

我想改进一下Dogbert的答案:

resources "/tasks", TaskController do
  get "/implement", TaskController, :implement, as: :implement
end
唯一添加的是路线末端的
as::implement


因此,您将获得名为
task\u implement\u path
的路由,而不是丑陋的
task\u task\u path

看起来收集路由必须是:

get "tasks/implement", Tasks, :implement # collection route
我认为phoenix没有rails那样的成员/集合资源路由

我发现这个链接是他们讨论了一些收集路线,并给出了一个类似于我上面提到的示例:


这里是另一个解决方案:

scope "/tasks" do
  get "/:id/implement", TasksController, :implement
  get "/done", TasksController, :done
end
resources "/tasks", TasksController
implement
操作有一个成员路由,
done
操作有一个收集路由

您可以通过以下函数调用获取前者的路径:

tasks_path(@conn, :implement, task)

请注意,您应该将
资源
行放在
范围
块之后。否则,Phoenix会将
/tasks/done
识别为
show
操作的路径。

我如何在该元素中描述
收集
?还想知道如何将其用于资源下的收集路线。获取“任务/实施”,任务,:implement#collection route如何定义
GET/tasks/implement
?这确实是一个很好的技巧。你如何描述收集路径?我得到了一个
未定义的函数task\u implement\u path/1
,有什么想法吗?好吧,我的错,我用
task\u implement\u path(task)
而不是
task\u implement\u path来命名它(康涅狄格州:工具,任务)
。不过不是很干。
tasks_path(@conn, :implement, task)