با سلام خدمت کاربران گرامی سایت پی وی لرن و آن دسته از کاربرانی که به زبان PHP علاقه دارند. این دوره آموزش CakePHP مخصوص آن ها تهیه شده تا مهارت و تسلط خود را بر این زبان با یادگیری CakePHP به حد کمال برسانند و با کمک آن به یک برنامه نویس حرفه ای در عرصه PHP تبدیل شوند. در جلسه گذشته به آموزش پیکربندی ایمیل پرداختیم. در ادامه این دوره به آموزش مسیر یابی در CakePHP می پردازیم.
معمولاً مسیرها در فایل config / routes.php اجرا می شوند. مسیر یابی می تواند به دو صورت اجرا شود :
در زیر یک مثال از هر دو نمونه ارائه شده است:
1 2 3 4 5 6 7 | // Using the scoped route builder. Router::scope('/', function ($routes) { $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']); }); // Using the static method. Router::connect('/', ['controller' => 'Articles', 'action' => 'index']); |
هر دو روش، Index از ArticlesController را اجرا خواهند کرد. البته روش ( سازنده محدوده مسیر ) عملکرد بهتری خواهد داشت.
Router:: از روش ()connect برای اتصال مسیرها استفاده می شود. در ادامه می توانید سینتکس این روش را ببینید:
1 | static Cake\Routing\Router::connect($route, $defaults =[], $options =[]) |
سه روش برای روتر :: ()connect وجود دارد:
در ادامه می توانید فرمت اصلی یک مسیر را ببینید:
1 2 3 4 5 | $routes->connect( 'URL template', ['default' => 'defaultValue'], ['option' => 'matchingRegex'] ); |
تغییرات در فایل config / routes.php را به صورت زیر نشان داده می شود.
config/routes.php
1 2 3 4 5 6 7 8 9 10 11 12 | <?php use Cake\Core\Plugin; use Cake\Routing\RouteBuilder; use Cake\Routing\Router; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/', ['controller' => 'Tests', 'action' => 'index']); $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); $routes->fallbacks('DashedRoute'); }); Plugin::routes(); |
یک فایل TestsController.php را در src / Controller / TestsController.php ایجاد کنید. سپس کد زیر را در فایل کنترل کننده کپی کنید.
1 2 3 4 5 6 7 8 9 | <?php namespace App\Controller; use App\Controller\AppController; class TestsController extends AppController{ public function index(){ } } ?> |
یک پوشه Test ایجاد کنید و زیر src / Template و زیر آن پوشه نیز یک فایل نمایش به نام index.ctp ایجاد نمایید و در آخر نیز کد زیر را در آن فایل کپی کنید.
src/Template/Tests/index.ctp
1 | This is CakePHP tutorial and this is an example of connecting routes. |
مثال بالا را با مراجعه به URL زیر اجرا کنید.
/http://localhost:85/CakePHP
URL فوق خروجی زیر را تولید می کند.
arguments های منتخب، arguments هایی هستند که بهURL منتقل می شوند.
این argument می تواند به کنترل کننده منتقل شود. این arguments های منتهی به کنترل شما به سه روش اجرا می شود.
مثال زیر نشان می دهد چگونه می توانیم arguments را به کنترلگر action منتقل نماییم.
آدرس زیر را مشاهده کنید:
http: // localhost: 85 / CakePHP / tests / value1 / value2
این خط با مسیر زیر مطابقت دارد.
1 2 | $routes->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'index'],['pass' => ['arg1', 'arg2']]); |
در اینجا مقدار ۱ از URL به arg1 اختصاص خواهد یافت و value2 به arg2 اختصاص خواهد یافت.
هنگامی که argument به controller’s action منتقل می شود، می توانید این argument را با عبارت زیر دریافت کنید.
1 | $args = $this->request->params[‘pass’] |
argument منتقل شده به عمل کنترل کننده در متغیر $ args ذخیره می شود.
این argument می تواند به وسیله عبارت زیر به action منتقل می شود.
1 | $routes->connect('/', ['controller' => 'Tests', 'action' => 'index',5,6]); |
عبارت فوق دو آرگومان ۵ و ۶ را به روش ()TestController’s index منتقل می کند.
تغییرات در فایل config / routes.php را همانطور که در برنامه زیر نشان داده شده تغییر دهید.
config/routes.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php use Cake\Core\Plugin; use Cake\Routing\RouteBuilder; use Cake\Routing\Router; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action'=> 'index'],['pass' =>['arg1', 'arg2']]); $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); $routes->fallbacks('DashedRoute'); }); Plugin::routes(); |
یک فایل TestsController.php را در src / Controller / TestsController.php ایجاد کنید. سپس کد زیر را در فایل کنترل کننده کپی کنید.
src/Controller/TestsController.php
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace App\Controller; use App\Controller\AppController; class TestsController extends AppController{ public function index($arg1,$arg2){ $this->set('argument1',$arg1); $this->set('argument2',$arg2); } } ?> |
یک فولدر Test را در src / Template ایجاد کنید و در زیر آن پوشه View را به نام index.ctp ایجاد نمایید.
در نهایت کد زیر را در آن فایل کپی کنید.
src/Template/Tests/index.ctp
1 2 3 | This is CakePHP tutorial and this is an example of Passed arguments.<br /> Argument-1: <?=$argument1?><br /> Argument-2: <?=$argument2?><br /> |
مثال بالا را با مراجعه به URL زیر اجرا نمایید.
http://localhost:85/CakePHP/tests/Virat/Kunal
پس از اجرای، URL بالا خروجی زیر را تولید می شود.
در این جلسه آموزش مسیر یابی در CakePHP به علاقمندان این دوره ارائه شد.
در جلسه بعد با آموزش تولید URL ها در CakePHP همراهتان هستیم.
با پی وی لرن همراه باشید.
سلام
سلام وقت بخیر
لطفا آرگومان رو به استدلال ترجمه نکنید، خیلی سخت فهم میشه.
پی وی لرن
سلام
بله ممنون، این مورد اصلاح گردید.