آکادمی کدنویسان با هدف برگزاری آموزش های آنلاین راه اندازی شد. با ثبت نام در دوره های پیش رو، تابستان پرباری داشته باشید

آموزش سیمفونی – 10# مسیریابی در چارچوب سیمفونی

آموزش چارچوب سیمفونی

مسیریابی به معنای نگاشت و اتصال مسیرهایی که کاربران ما در درخواست های خود استفاده خواهند کرد به توابع تعریف شده در کلاس کنترولر است. اینکه برای هر درخواست کاربر، کدام تابع کنترولر اجرا شود و این درخواست چه پارامترهایی داشته باشد و هر پارامتر ورودی به کدام پارامتر تابع کنترولر نگاشت شود.

سیمفونی روش های مختلفی برای پیکربندی این نگاشت ها فراهم می کند.

استفاده از URL های زیبا برای هر برنامه ی کاربردی لازم است. این به معنی کنار گذاشتن URL های زشتی مثل:

http://www.codenevisan.com/index.php?article_id=124

و استفاده از URL زیبایی مثل:

http://www.codenevisan.com/read/about-symfony-routing

است.

مهمتر از زشتی و زیبایی، انعطاف پذیری است .اینکه اگر بخواهید یک صفحه را از پوشه ای به پوشه دیگری از سایت منتقل کنید، چه تغییراتی در آدرس ها باید انجام دهید. در چارچوب سیمفونی مسیریابی و تعیین URL ها به راحتی انجام شده و انعطاف پذیری بالایی فراهم می کند.

ایجاد مسیرها

مسیر یک نگاشت از یک مسیر URL به یک کنترل کننده است. فرض کنید می خواهید یک مسیر دقیقا مشابه /blog باشد و مسیر دیگری بصورت پویا، با  URL هایی مانند / blog/my-post یا /blog/all-about-symfony تطبیق داده شود.

مسیرها را می توان در فایل هایی با فرمت  YAML، XML و PHP و یا با روش حاشیه نویسی تعریف کرد. تمام فرمت ها ویژگی ها و عملکرد یکسانی را ارائه می دهند، بنابراین می توانید هر فرمت را که خواستید انتخاب کنید. اگر حاشیه نویسی (annotation) را انتخاب می کنید، باید یکبار دستور زیر را در خط فرمان اجرا کنید تا سیمفونی از آن پشتیبانی کند :


composer require annotations

حالا می توانید به شکل های مختلف مسیرها را تعریف کنید. در روش حاشیه نویسی تعریف مسیرها در داخل کلاس کنترولر و قبل از هر کدام از توابع کنترولر قرار داده می شود. و در روش های دیگر باید فایلی با پسوند مربوطه در زیر پوشه config از ماژول، کاربرد یا پروژه قرار داده شود.

مسیریابی با روش حاشیه نویسی

// src/Controller/BlogController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class BlogController extends AbstractController
{
/**
* Matches /blog exactly
*
* @Route("/blog", name="blog_list")
*/
public function list()
{
// ...
}
/**
* Matches /blog/*
*
* @Route("/blog/{slug}", name="blog_show")
*/
public function show($slug)
{
// $slug will equal the dynamic part of the URL
// e.g. at /blog/yay-routing, then $slug='yay-routing'
// ...
}
}

مسیریابی با روش YAML

# config/routes.yaml
blog_list:
path: /blog
controller: App\Controller\BlogController::list
blog_show:
path: /blog/{slug}
controller: App\Controller\BlogController::show

مسیریابی با روش XML

<!-- config/routes.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing
http://symfony.com/schema/routing/routing-1.0.xsd">
<route id="blog_list" controller="App\Controller\BlogController::list" path="/blog" >
<!-- settings -->
</route>
<route id="blog_show" controller="App\Controller\BlogController::show" path="/blog/{slug}">
<!-- settings -->
</route>
</routes>

مسیریابی با روش PHP

// config/routes.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
use App\Controller\BlogController;
$routes = new RouteCollection();
$routes->add('blog_list', new Route('/blog', array(
'_controller' => [BlogController::class, 'list']
)));
$routes->add('blog_show', new Route('/blog/{slug}', array(
'_controller' => [BlogController::class, 'show']
)));
return $routes;

با تعریف هر کدام از مسیریابی های فوق:

اگر کاربر blog/ را درخواست کند ، تابع ()list از کلاس BlogController اجرا خواهد شد.

اگر کاربر */blog/  را درخواست کند، با مسیر دومی تطبیق داده شده و تابع ()show از کلاس کنترولر BlogController اجرا خواهد شد. بعنوان مثال اگر درخواست بصورت 

blog/yay-routing/  باشد ، پارامتر ورودی slug$ از تابع ()show یا عبارت yay-routing پر شده و این تابع فراخوانی می شود.

هر وقت که در مسیر خود {placeholder} داشته باشید،  هر مقداری می تواند به جای آن قرار گیرد و تابع کنترل کننده هم می تواند یک پارامتر به نام $placeholder داشته باشد.

هر مسیر نیز یک نام داخلی مثل  blog_list و blog_show دارد که می توانند هر چیزی باشند (ولی در کل برنامه باید منحصر به فرد باشند). نام ها دارای هیچ معنا و مفهومی نیستند و تنها بعدا می توانید از آنها برای تولید URL ها استفاده کنید.

ما در این جلسه سعی کردیم، مسیریابی در سیمفونی را بصورت ساده و قابل فهم توضیح دهیم، برای یادگیری کامل می توانید به مبحث مسیریابی در سایت مرجع سیمفونی مراجعه کنید.

برچسب ها

, , , , ,

محصولات پیشنهادی


نظرات کاربران


نظرات برای آموزش چارچوب سیمفونی | بدون نظر »

کاربر عزیز، لطفاً دیدگاه ارزشمند خود را از طریق فرم زیر برای ما ارسال کنید:

درباره کدنویسان
آکادمی کدنویسان جهت کمک به دانشجویان رشته های کامپیوتر و فناوری اطلاعات و همه علاقمندان به طراحی و برنامه نویسی برای ویندوز، وب و موبایل ایجاد شده است.
بیشتر آموزش های سایت کدنویسان، بصورت رایگان ارائه شده است و بعضی بسته های آموزشی تصویری و نیز نرم افزارهای پیاده سازی شده در ازای پرداخت، قابل دانلود هستند.
هر گونه نظر، انتقاد یا پیشنهادی در مورد مطالب یا عملکرد کدنویسان دارید، حتما با ما در میان بگذارید.
نمادهای اعتماد ما


تماس با ما
  • شماره همراه : ۰۹۱۵۱۶۰۴۰۶۸
  • آی دی تلگرام : @mmoha94
  • پست الکترونیکی : mohammadi.sm@gmail.com
  • آدرس پستی : بیرجند، خیابان پیروزی، پیروزی ۹، پلاک ۲۸
کلیه حقوق متعلق به سایت کدنویسان است، انتشار و کپی برداری از مطالب این سایت غیرمجاز بوده و پیگرد قانونی دارد.