0Pricing
Elixir & Phoenix: Scalable Backend Development · درس

التوجيه ووحدات التحكم وPlugs

عرّفوا المسارات ونفّذوا إجراءات وحدات التحكم واستخدموا Plugs لبناء مسارات طلبات معيارية وقابلة لإعادة الاستخدام.

التوجيه ووحدات التحكم وPlugs درس مجاني في Elixir & Phoenix: Scalable Backend Development على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Elixir & Phoenix: Scalable Backend Development، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Elixir & Phoenix: Scalable Backend Development 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

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
end

Controllers: 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
end

Path 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
end

Using 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.

الأسئلة الشائعة

هل درس «التوجيه ووحدات التحكم وPlugs» مجاني؟

نعم — نص درس «التوجيه ووحدات التحكم وPlugs» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Elixir & Phoenix: Scalable Backend Development، انتقل إلى CoddyKit PRO. تتضمن دورة Elixir & Phoenix: Scalable Backend Development 4 دروس في المجموع.

ماذا ستتعلم في «التوجيه ووحدات التحكم وPlugs»؟

عرّفوا المسارات ونفّذوا إجراءات وحدات التحكم واستخدموا Plugs لبناء مسارات طلبات معيارية وقابلة لإعادة الاستخدام. تتمرن على Elixir & Phoenix: Scalable Backend Development مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Elixir & Phoenix: Scalable Backend Development؟

لا تُشترط خبرة سابقة. Elixir & Phoenix: Scalable Backend Development على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التوجيه ووحدات التحكم وPlugs»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Elixir & Phoenix: Scalable Backend Development هذا؟

نعم. كل درس في Elixir & Phoenix: Scalable Backend Development يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد مشروع Phoenix وبنيته
  2. التوجيه ووحدات التحكم وPlugs
  3. العروض والقوالب وأساسيات LiveView
  4. الميزات الفورية باستخدام Phoenix Channels
← العودة إلى Elixir & Phoenix: Scalable Backend Development