참고: 이 버전은 Ecto 1.1과 Ecto 2.0을 모두 지원하도록 업데이트되었습니다. 자세한 내용은 설치를 참조하세요.
ExAdmin은 Elixir 및 Ruby on Rails용 ActiveAdmin의 포트이자 영감인 Phoenix Framework용 자동 관리 패키지입니다.
라이브 데모를 확인해 보세요. 소스 코드는 ExAdmin Demo에서 찾을 수 있습니다.
다대다 관계, 중첩 속성 및 인증의 예를 보려면 이 추가 라이브 데모를 확인하세요.
자세한 내용은 문서와 Wiki를 참조하세요.
ExAdmin은 Phoenix Framework를 사용하여 코드가 거의 또는 전혀 없이 CRUD 관리 도구를 만드는 응용 프로그램용 추가 기능입니다. 관리하려는 Ecto 모델을 정의하기 위해 몇 가지 혼합 작업을 실행하면 추가 코드 없이 작동하는 것을 갖게 됩니다.
ExAdmin을 사용하기 전에 Phoenix 프로젝트와 생성된 Ecto 모델이 필요합니다.
deps에 ex_admin을 추가하세요.
mix.exs
defp deps do ... {:ex_admin, "~> 0.8"}, ... 끝
mix.exs
defp deps do ... {:ex_admin, github: "smpallen99/ex_admin"}, ... 끝
구성 파일에 일부 관리 구성 및 관리 모듈을 추가하십시오.
구성/config.exs
구성 :ex_admin, 저장소: MyProject.Repo, 모듈: MyProject, # MyProject.Web for phoenix >= 1.3.0-rc 모듈: [MyProject.ExAdmin.Dashboard, ]
종속성 가져오기 및 컴파일
mix do deps.get, deps.compile
ExAdmin 구성:
mix admin.install
관리 경로 추가
웹/router.ex
defmodule MyProject.Router 수행 MyProject.Web, :router를 사용하세요. ExAdmin.Router를 사용하십시오. ... 범위 "/", MyProject 수행... 끝 # /admin에 ExAdmin 경로를 설정합니다. 범위 "/admin", ExAdmin dopipe_through :browseradmin_routes() 끝
페이징 구성 추가
lib/my_project/repo.ex
defmodule MyProject.Repo douse Ecto.Repo, otp_app: :my_projectuse Scrivener, page_size: 10 끝
brunch-config.js 파일을 편집하고 설치 프로그램이 이 파일에 추가한 지침을 따르세요. 이를 위해서는 블록 2개를 복사하고 기존 블록을 교체해야 합니다.
iex -S mix phoenix.server
사용하여 애플리케이션을 시작합니다.
http://localhost:4000/admin을 방문하세요.
기본 대시보드 페이지가 표시됩니다.
모델을 추가하려면 admin.gen.resource
mix 작업을 사용하세요.
mix admin.gen.resource MyModel
구성 파일에 새 모듈을 추가합니다.
구성/config.exs
구성 :ex_admin, 저장소: MyProject.Repo, 모듈: MyProject, 모듈: [MyProject.ExAdmin.Dashboard,MyProject.ExAdmin.MyModel, ]
Phoenix 서버를 다시 시작하고 http://localhost:4000/admin/my_model
로 이동합니다.
이제 MyModel
을 나열/추가/편집/삭제할 수 있습니다.
ExAdmin은 스키마의 변경 집합을 사용합니다. 기본적으로 우리는 스키마에서 changeset
기능을 호출하지만, 업데이트에 사용하는 변경 집합을 별도로 구성하고 생성할 수도 있습니다.
사용자 정의 변경 세트:
defmodule TestExAdmin.ExAdmin.Simple 수행 ExAdmin.Register를 사용하세요. Register_resource TestExAdmin.Simple doupdate_changeset :changeset_updatecreate_changeset :changeset_create 끝
우리는 다대다를 지원하며 Ecto에서 제공하는 것처럼 많은 관계를 가지고 있습니다. 다대다 관계에는 Cast_assoc을 사용하고, 다수 관계에는 put_assoc을 사용하는 것이 좋습니다. 테스트 스키마에서 예제 변경 세트를 볼 수 있습니다.
관계에 대한 양식의 결과를 전달할 때 변경 세트에서 더 쉽게 작업할 수 있도록 일부 강제를 수행합니다. 컬렉션 체크박스의 경우 선택한 옵션 ID의 배열을 변경 세트에 전달하므로 여기에 표시된 대로 해당 ID를 가져와서 put_assoc을 사용할 수 있습니다.
많은 삭제를 지원하려면 스키마에 가상 속성을 설정해야 합니다. 관련 스키마에서 양식의 파괴 속성을 추적할 수 있도록 _destroy 가상 속성을 추가해야 합니다. 또한 이를 변경 세트에 캐스팅해야 합니다. 다음은 변경 세트의 예입니다. 이 시나리오에서는 사용자에게 많은 제품이 있으며 제품을 삭제할 수 있습니다. 우리에게는 또한 많은 역할이 관련되어 있습니다.
defmodule TestExAdmin.User 수행 Ecto.Changeset 가져오기 Ecto.Schema를 사용하세요. Ecto.Query 가져오기 스키마 "사용자" dofield :name, :stringfield :email, :stringfield :active, :boolean, 기본값: truehas_many :products, TestExAdmin.Product, on_replace: :deletemany_to_many :roles, TestExAdmin.Role, Join_through: TestExAdmin.UserRole, on_replace: :삭제 끝 @fields ~w(활성 이메일 이름) def 변경 집합(모델, params %{}) domodel|> Cast(params, @fields)|> verify_required([:email, :name])|> Cast_assoc(:products, 필수: false)|> add_roles(params) 끝 def add_roles(changeset, params) doif Enum.count(Map.get(params, :roles, [])) > 0 do ids = params[:roles] Role = TestExAdmin.Repo.all(TestExAdmin.Role의 r에서, 여기서: ^ids의 r.id) put_assoc(변경 집합, :roles, 역할)else 변경 집합end endenddefmodule TestExAdmin.Role 수행 Ecto.Schema를 사용하세요. Ecto.Changeset 가져오기 별칭 TestExAdmin.Repo 스키마 "역할" dofield :name, :stringhas_many :uses_roles, TestExAdmin.UserRolemany_to_many :users, TestExAdmin.User, Join_through: TestExAdmin.UserRole 끝 @fields ~w(이름) def 변경 집합(모델, params %{}) domodel|> 캐스트(params, @fields) endenddefmodule TestExAdmin.Product 수행 Ecto.Schema를 사용하세요. Ecto.Changeset 가져오기 스키마 "제품" dofield :_destroy, :boolean, virtual: truefield :title, :stringfield :price, :decimalbelongs_to :user, TestExAdmin.User 끝 defchangeset(schema, params %{}) doschema|> Cast(params, ~w(제목 가격 user_id))|> verify_required(~w(제목 가격))|> mark_for_deletion 끝 defp mark_for_deletion(changeset) do# 삭제가 설정되어 있고 true이면 작업을 변경해 보겠습니다.if get_change(changeset, :_destroy) do %{changeset | 작업: :delete}else 변경 설정 끝
Platformatec 블로그에는 이러한 관계가 어떻게 작동하는지 설명하는 좋은 블로그 게시물이 있습니다: http://blog.plataformatec.com.br/2015/08/working-with-ecto-associations-and-embeds/
표시할 필드를 정의하려면 index do
명령을 사용하십시오.
관리자/my_model.ex
defmodule MyProject.ExAdmin.MyModel 수행 ExAdmin.Register를 사용하세요. Register_resource MyProject.MyModel doindex do selectable_column() 컬럼 :id 컬럼 :name actions() # 기본 작업 표시 컬럼엔드 끝
다음 예에서는 form
매크로를 사용하여 양식을 사용자 정의하는 방법을 보여줍니다.
defmodule MyProject.ExAdmin.Contact 수행 ExAdmin.Register를 사용하세요. Register_resource MyProject.Contact doform contact do 입력 doinput contact, :first_nameinput contact, :last_nameinput contact, :emailinput contact, :register_date, type: Date # Ecto를 사용하는 경우 :date type을 Schemainput contact, :category, collection: MyProject.Category .all end 입력 "그룹" doinputs :groups, as: :check_boxes, collection: MyProject.Group.all 끝 끝
다음 예에서는 표시 페이지를 수정하는 방법을 보여줍니다.
defmodule MyProject.ExAdmin.Question 수행 ExAdmin.Register를 사용하세요. Register_resource MyProject.Question 돔nu 우선 순위: 3show 질문 do attribute_table # 기본 속성 표시 # 질문의 선택 사항을 나열하는 패널 만들기 panel "Choices" dotable_for(question.choices) do 열 :key 열 :nameend endend 끝
사용자 정의 필드 유형에 대한 지원은 렌더링 필드와 입력 컨트롤의 두 영역에서 수행됩니다.
ExAdmin에서 지원하지 않는 렌더링 유형에는 ExAdmin.Render.to_string/
프로토콜을 사용하십시오.
예를 들어 튜플 렌더링을 지원하려면 프로젝트에 다음 파일을 추가하세요.
# lib/render.exdefimpl ExAdmin.Render, for: Tuple do def to_string(tuple), do: 검사(tuple)end
입력 유형을 설정하려면 :field_type_matching
구성 항목을 사용하세요.
예를 들어 다음 프로젝트가 있다고 가정해 보겠습니다.
defmodule ElixirLangMoscow.SpeakerSlug 수행 EctoAutoslugField.Slug를 사용하세요. [:name, :company]에서 :slugenddefmodule ElixirLangMoscow.Speaker do ElixirLangMoscow.Web을 사용하세요:모델 Arc.Ecto.Model 사용 별칭 ElixirLangMoscow.SpeakerSlug 스키마 "스피커" dofield :slug, SpeakerSlug.Typefield :avatar, ElixirLangMoscow.Avatar.Type 끝
프로젝트 구성에 다음을 추가합니다.
구성 :ex_admin, # ... field_type_matching: %{ElixirLangMoscow.SpeakerSlug.Type => :string,ElixirLangMoscow.Avatar.Type => :file }
ExAdmin은 2가지 테마를 지원합니다. 새로운 AdminLte2 테마는 기본적으로 활성화됩니다. 이전 ActiveAdmin 테마도 이전 버전과의 호환성을 원하는 사람들을 위해 지원됩니다.
테마를 ActiveAdmin으로 변경하려면 다음에서 config/config.exs
파일을 확인하세요.
구성/config.exs
구성 :ex_admin, 테마: ExAdmin.Theme.ActiveAdmin, ...
AdminLte2 테마에는 파란색, 검정색, 보라색, 녹색, 빨간색, 노란색, 파란색 빛, 검은색 빛, 보라색 빛, 녹색 빛, 빨간색 빛 및 노란색 빛을 포함한 다양한 스킨 색상이 있습니다.
예를 들어 피부색을 보라색으로 변경하려면 다음을 수행하십시오.
구성/config.exs
구성 :ex_admin, skin_color: :보라색, ...
config/config.exs
파일에 다음을 추가하여 메뉴 표시줄 오른쪽 상단에 테마 선택기를 추가할 수 있습니다.
구성/config.exs
구성 :ex_admin, theme_selector: [{"AdminLte", ExAdmin.Theme.AdminLte2},{"ActiveAdmin", ExAdmin.Theme.ActiveAdmin} ], ...
모듈에 model_name/0
함수를 정의하여 모델 이름을 재정의할 수 있습니다. 이는 일부 작업에 다른 모듈을 사용하려는 경우 유용합니다.
관리자/my_model.ex
def model_name do "custom_name"끝
ExAdmin은 인증 작업을 타사 패키지에 맡깁니다. Coherence 체크아웃 사용의 예는 Contact Demo Project를 참조하세요.
인증 추가에 대한 자세한 내용을 보려면 Wiki를 방문하세요.
ExAdmin에 기여해 주셔서 감사합니다. 자세한 내용은 CODE_OF_CONDUCT.md 및 CONTRIBUTING.md 가이드를 확인하세요. 우리는 일반적으로 이슈 트래커에 기능과 버그 목록을 보관합니다.
ExAdmin 데모의 자세한 예
간단한 튜토리얼을 보려면 Elixir Survey Tutorial을 방문하세요.
라이브 데모
문서
ex_admin
은 저작권(c) 2015-2016 E-MetroTel입니다.
소스 코드는 MIT 라이선스에 따라 공개됩니다.
자세한 내용은 라이센스를 확인하세요.