점점 젖음 와 피닉스

20967 단어 phoenixrestelixir
이제 phoenix CRUD 애플리케이션을 작성하는 것은 초보자에게 장애물이 아닙니다. 몇 가지installationsteps을 완료하면 초기 프로젝트가 실행됩니다. 뷰, 컨트롤러 및 컨텍스트가 포함된 새로운 HTML 리소스를 생성하는 몇 가지 매직 코드가 있습니다. 지금 우리는 그 부분으로 가지 않을 것입니다. 컨텍스트, 컨트롤러 및 보기에 대한 명확한 그림이 있는 프로젝트에서 이러한 매직 코드를 사용하기 전에 코딩 생활에서 행복한 경로를 제공할 것입니다. 따라서 샘플 phoenix 프로젝트를 통해 이러한 모든 것을 살펴보겠습니다.

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

    좋은 웹페이지 즐겨찾기