Perutean, Pengendali, dan Plug
Definisikan rute, terapkan tindakan pengendali, dan gunakan Plug untuk membangun alur permintaan yang modular dan dapat digunakan ulang.
Perutean, Pengendali, dan Plug adalah pelajaran Elixir & Phoenix: Scalable Backend Development gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Elixir & Phoenix: Scalable Backend Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Mapping Your Web Requests
Welcome to routing in Phoenix! Think of routing as your application's traffic controller. When a user visits a URL, the router determines which part of your code should handle that request.
It's how Phoenix connects an incoming web address (like /users) to a specific function in your application.
The `router.ex` File
In Phoenix, all your routes are defined in the lib/my_app_web/router.ex file. This file uses special macros to declare how different HTTP methods (GET, POST, PUT, DELETE) map to your application's logic.
You'll often see routes grouped into scopes and processed by pipelines, which apply common behaviors.
Defining a Simple Route
Let's look at how a basic route is defined. Here, a GET request to the root path / is mapped to the index function within PageController.
Notice the pipe_through :browser which applies a set of common behaviors to browser requests.
defmodule MyPhoenixAppWeb.Router do
use MyPhoenixAppWeb, :router
pipeline :browser do
plug :accepts, ["html"]
# ... other plugs for sessions, security, etc.
end
scope "/", MyPhoenixAppWeb do
pipe_through :browser
# Maps GET / to MyPhoenixAppWeb.PageController.index
get "/", PageController, :index
# Maps GET /hello to MyPhoenixAppWeb.PageController.hello
get "/hello", PageController, :hello
end
endControllers: Handling Requests
Once the router directs a request, a controller takes over. Controllers are Elixir modules that contain actions (functions) responsible for handling specific requests.
Their main job is to:
- Receive request parameters.
- Perform necessary business logic (e.g., fetch data).
- Prepare a response, often by rendering a template.
Your First Controller Action
Controller actions are just functions that accept two arguments: conn (the connection struct) and params (request parameters).
Here's a simple PageController with an index action that renders an index.html template.
defmodule MyPhoenixAppWeb.PageController do
use MyPhoenixAppWeb, :controller
# This action handles requests for the root path "/"
def index(conn, _params) do
# The render function looks for a template like page/index.html.heex
render(conn, "index.html")
end
# This action handles requests for "/hello"
def hello(conn, _params) do
text(conn, "Hello from Phoenix!")
end
endPath Helpers: Generating URLs
Instead of hardcoding URLs in your templates or code, Phoenix provides path helpers. These are functions that generate URLs based on your defined routes.
Using path helpers makes your links robust. If you change a route's path, you only update it in router.ex, and all generated links will automatically update.
For example, ~p"/" generates the root path.
Plugs: Request Middleware
Plugs are composable functions or modules that process the Plug.Conn (connection) struct. They act like middleware, allowing you to intercept and modify requests before they reach a controller, or modify responses after they leave.
Think of them as a series of steps a request goes through. Each plug can transform the request (or halt it) and pass it to the next plug in the pipeline.
Creating a Custom Plug
Plugs are simple Elixir modules implementing the init/1 and call/2 functions. init/1 is for configuration, and call/2 does the actual work.
Here's a plug that logs the request path and adds a custom header to the response:
defmodule MyPhoenixAppWeb.Plugs.MyLogger do
import Plug.Conn
def init(opts), do: opts
def call(conn, _opts) do
IO.puts("Request received for path: #{conn.request_path}")
put_resp_header(conn, "X-Custom-Header", "Hello from Plug!")
end
endUsing a Custom Plug
To use your custom plug, you add it to a pipeline in your router.ex file. All requests passing through that pipeline will then be processed by your plug.
For example, adding plug MyPhoenixAppWeb.Plugs.MyLogger to the :browser pipeline means every browser request will trigger this plug.
- Plug.Parsers: Parses request bodies (JSON, forms).
- Plug.Logger: Logs request details.
- Plug.Static: Serves static assets like CSS/JS.
Quick Check: Phoenix Request Flow
Let's test your understanding of how Phoenix handles web requests.
Recap: Routing, Controllers, Plugs
In this lesson, you've learned the core components that handle web requests in Phoenix:
- Routes (in
router.ex) map incoming URLs to controller actions. - Controllers contain actions (functions) that execute business logic and prepare responses.
- Plugs are reusable components that process the request connection (
Plug.Conn) in a pipeline, before or after the controller.
Together, these form a powerful and flexible system for building web applications.
Belajar Elixir dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Perutean, Pengendali, dan Plug” gratis?
Ya — teks lengkap “Perutean, Pengendali, dan Plug” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Elixir & Phoenix: Scalable Backend Development, upgrade ke CoddyKit PRO. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Perutean, Pengendali, dan Plug”?
Definisikan rute, terapkan tindakan pengendali, dan gunakan Plug untuk membangun alur permintaan yang modular dan dapat digunakan ulang. Kamu berlatih Elixir & Phoenix: Scalable Backend Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Elixir & Phoenix: Scalable Backend Development?
Tidak diperlukan pengalaman sebelumnya. Elixir & Phoenix: Scalable Backend Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Perutean, Pengendali, dan Plug” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Elixir & Phoenix: Scalable Backend Development ini?
Ya. Setiap pelajaran Elixir & Phoenix: Scalable Backend Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan dan Struktur Proyek Phoenix
- Perutean, Pengendali, dan Plug
- Tampilan, Templat, dan Dasar-Dasar LiveView
- Fitur Waktu Nyata dengan Phoenix Channels