앱에 새 라우트를 추가하는 것이 매우 직관적이지 않다는 것을 발견했습니다. 다른 사람들을 위해 여기 문서로 남깁니다.
저는 루트 레벨에 /print 라우트를 추가하고 싶었습니다.
- 이 튜토리얼은 어떻게 /admin 라우트를 추가하는지를 문서화하지만, 일반 라우트에 대해서는 다루지 않습니다.
- 여기는 루트 레벨에 API 엔드포인트를 추가하는 방법에 대한 정보입니다 (ember 라우트가 아닙니다).
- 여기는 최상위 레벨 ember 라우트 문제 해결에 대한 긴 논의입니다.
제 환경에서 작동한 최종 코드는 다음과 같습니다. county-fence는 제 플러그인 이름이므로, 이것을 자신의 플러그인 이름으로 교체하세요.
Ember Route
assets/javascripts/discourse/routes/county-fence-route-map.js.es6
export default function() {
this.route('print', { path: '/print' });
}
assets/javascripts/discourse/routes/print.js
import Route from "@ember/routing/route";
export default class PrintRoute extends Route {
model() {
return { message: "This is a custom print page!" };
}
}
assets/javascripts/discourse/templates/print.gjs
import RouteTemplate from "ember-route-template";
import ...;
export default RouteTemplate(
<template>
...
</template>
)
API Route
plugin.rb
after_initialize do
require_relative "app/controllers/print_controller"
end
app/controllers/print_controller.rb
# frozen_string_literal: true
# HTTP Status codes: https://github.com/discourse/discourse/blob/main/lib/discourse.rb
class ::CountyFence::PrintController < ::ApplicationController
requires_plugin CountyFence::PLUGIN_NAME
def save_print
end
def list_prints
render json: { name: "donut", description: "delicious!" }
end
def get_print
end
end
Discourse::Application.routes.append do
post "/print" => "county_fence/print#save_print"
get "/print" => "county_fence/print#list_prints"
get "/print/:id" => "county_fence/print#get_print"
end