점점 젖음 와 피닉스
phoenix 프로젝트의 html 리소스 부분은 다음과 같습니다.
이 모든 단계를 다루는 프로젝트를 해보자
피닉스 프로젝트 생성
mix phx.new greeting_cards
We are almost there! The following steps are missing:
$ cd greeting_card
Then configure your database in config/dev.exs and run:
$ mix ecto.create
Start your Phoenix app with:
$ mix phx.server
You can also run your app inside IEx (Interactive Elixir) as:
$ iex -S mix phx.server
오류가 있는 경우 설치 가이드를 확인하여 단계별로 모든 작업을 수행하시기 바랍니다.
기능부터 시작하겠습니다.
우리는 Greeting_cards라는 프로젝트를 생성하여 데이터베이스에 인사말 카드 컬렉션을 공급해야 하는 초기 단계로 인사말 카드 디자인 컬렉션용 앱을 가정하겠습니다.
이주
mix ecto.gen.migration create_greeting_cards
==> greeting_card
Compiling 14 files (.ex)
Generated greeting_card app
* creating priv/repo/migrations/20220903182959_create_greeting_cards.exs
출력에 표시된 생성된 .exs로 이동
다음 스크립트로 파일을 업데이트하십시오.
defmodule GreetingCard.Repo.Migrations.CreateGreetingCards do
use Ecto.Migration
def change do
create table(:greeting_cards) do
add :name, :string
add :type, :string
add :template, :string
add :print_quality, :string
add :preview, :string
end
end
end
그리고 달린다
mix ecto.migrate
데이터베이스에 "greeting_cards"테이블을 생성합니다.
문맥
데이터 액세스 및 유효성 검사를 위한 캡슐화 계층이므로 자세한 내용을 위해 스키마가 컨텍스트 이름 아래에 그룹화됩니다.
참조 Contexts
만들다
lib/greeting_cards/feeder.ex
lib/greeting_cards/feeder/ #Directory
개요
Ecto.Schema는 외부 데이터를 엘릭서 구조체에 매핑하고, 스키마 파일에는 구조체를 조작할 때 필터링, 캐스팅, 유효성 검사 및 제약 조건 정의를 허용하는 데이터베이스 테이블 및 변경 집합에 대한 필드 사양이 포함되어 있습니다.
Schema
Chngeset
인사말 카드용 스키마를 생성하려면 여기를 클릭하세요.
만들다
lib/greeting_cards/feeder/greeting_card.ex
defmodule GreetingCard.Feeder.GreetingCard do
use Ecto.Schema
import Ecto.Changeset
schema "greeting_cards" do
field :name, :string
field :type, :string
field :template, :string
field :print_quality, :string
field :preview, :string
end
def changeset(greeting_card, params \\ %{}) do
greeting_card
|> cast(params, [:name, :type, :template, :print_quality, :preview])
|> validate_required([:name, :type, :print_quality])
end
컨텍스트 함수 쓰기
데이터베이스 테이블을 Schema 모듈에 의해 Elixir 구조체와 매핑한 다음 CRUD 작업을 수행하는 함수를 작성할 수 있습니다.
CRUD 함수를 작성하려면 다음을 참조하십시오.
Ecto.Repo
업데이트
lib/greeting_cards/feeder.ex
defmodule GreetingCard.Feeder do
alias GreetingCard.Repo
alias GreetingCard.Feeder.GreetingCard
def list_greeting_cards do
Repo.all(GreetingCard)
end
def create_greeting_card(params) do
%GreetingCard{}
|> GreetingCard.changeset(params)
|> Repo.insert()
end
def show_greeting_card(id) when not is_nil(id) do
Repo.get(GreetingCard, id)
end
def update_greeting_card(greeting_card, params) do
greeting_card
|> GreetingCard.changeset(params)
|> Repo.update()
end
def delete_greeting_card(greeting_card) do
Repo.delete(greeting_card)
end
end
iex shell을 사용하여 코드 실행 및 테스트
지금까지 우리는 기능을 만들기 위한 코드를 작성하고 있습니다. 디버깅 및 실행은 코딩의 또 다른 흥미로운 부분입니다. 웹 서버에서 기능을 실행하기 전에 iex 셸에서 실행하고 모든 기능이 우리가 원하는 대로 작동하는지 확인합니다. 예상되는
터미널 프로젝트 루트 디렉토리에서 실행
iex -S mix
여기에서 모듈 이름을 통해 쉘에서 함수를 호출하십시오.iex(2)> GreetingCard.Feeder.create_greeting_card(%{name: "card1",type: "birthday", template: "template1",print_quality: "canva"})
[debug] QUERY OK db=1.4ms queue=2.0ms idle=1173.7ms
INSERT INTO "greeting_cards" ("name","print_quality","template","type") VALUES ($1,$2,$3,$4) RETURNING "id" ["card1", "canva", "template1", "birthday"]
↳ :erl_eval.do_apply/6, at: erl_eval.erl:685
{:ok,
%GreetingCard.Feeder.GreetingCard{
__meta__: #Ecto.Schema.Metadata<:loaded, "greeting_cards">,
id: 1,
name: "card1",
preview: nil,
print_quality: "canva",
template: "template1",
type: "birthday"
}}
iex(3)> GreetingCard.Feeder.list_greeting_cards [debug] QUERY OK source="greeting_cards" db=0.9ms idle=1687.7ms
SELECT g0."id", g0."name", g0."type", g0."template", g0."print_quality", g0."preview" FROM "greeting_cards" AS g0 []
↳ :erl_eval.do_apply/6, at: erl_eval.erl:685
[
%GreetingCard.Feeder.GreetingCard{
__meta__: #Ecto.Schema.Metadata<:loaded, "greeting_cards">,
id: 1,
name: "card1",
preview: nil,
print_quality: "canva",
template: "template1",
type: "birthday"
}
]
iex(4)> GreetingCard.Feeder.show_greeting_card(1)
[debug] QUERY OK source="greeting_cards" db=0.5ms queue=0.6ms idle=373.3ms
SELECT g0."id", g0."name", g0."type", g0."template", g0."print_quality", g0."preview" FROM "greeting_cards" AS g0 WHERE (g0."id" = $1) [1]
↳ :erl_eval.do_apply/6, at: erl_eval.erl:685
%GreetingCard.Feeder.GreetingCard{
__meta__: #Ecto.Schema.Metadata<:loaded, "greeting_cards">,
id: 1,
name: "card1",
preview: nil,
print_quality: "canva",
template: "template1",
type: "birthday"
}
서버와 함께 실행
지금까지 우리는 기능의 데이터 계층에 대해 작업하고 있으며 보기 및 컨트롤러 계층도 구현해야 합니다. Phoenix 프로젝트에는 기본적으로 라우터를 지정하는 모듈Routing이 포함되어 있습니다. 그들은 피닉스 응용 프로그램의 주요 허브이며 HTTP 요청을 컨트롤러 작업에 일치시키고 실시간 채널 핸들러를 연결하는 등의 작업을 수행합니다.
참조Request Life cycle
Reference
이 문제에 관하여(점점 젖음 와 피닉스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mohammedalchemist/getting-wet-with-phoenix-2n0n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)