با سلام خدمت کاربران گرامی سایت پی وی لرن و آن دسته از کاربرانی که به زبان PHP علاقه دارند. این دوره آموزش CakePHP مخصوص آن ها تهیه شده تا مهارت و تسلط خود را بر این زبان با یادگیری CakePHP به حد کمال برسانند و با کمک آن به یک برنامه نویس حرفه ای در عرصه PHP تبدیل شوند. در جلسه گذشته کار با Redirect routing را فراگرفتیم. در این جلسه نیز شما را به آموزش کار با کنترل کننده ها در CakePHP دعوت می نماییم.
علت وجودی کنترل کننده ها controls، در واقع کنترل برنامه است.
کنترل کننده ها مانند پلی میان مدل ها و views ها عمل می کنند.
کنترل کننده ها به داده های ریکوئست رسیدگی می کنند؛ مطمئن می شوند که مدل های صحیحی فراخوانی شده اند و یک پاسخ یا یک view صحیح ارائه داده شده است.
در کنترل کننده ها وظیفه فراخوانی actions بر عهده Methods ها است.
هر کنترل کننده از کنوانسیون نامگذاری پیروی می کند.
نام کلاس کنترل کننده در فرم چندگانه، Camel Cased و در کنترل Controller – PostsController پایان می یابد.
کلاس AppConttroller کلاس parent کنترل کننده های تمام برنامه های کاربردی است.
این کلاس کلاس کنترلر CakePHP را گسترش می دهد.
AppController در src / Controller / AppController.php تعریف شده است و فایل حاوی کد زیر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php namespace App\Controller; use Cake\Controller\Controller; use Cake\Event\Event; class AppController extends Controller{ public function initialize(){ parent::initialize(); $this->loadComponent('RequestHandler'); $this->loadComponent('Flash'); } public function beforeRender(Event $event){ if (!array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), ['application/json', application/xml'])) { $this->set('_serialize', true); } } } |
AppController می تواند برای بارگذاری اجزاء مورد استفاده در هر کنترل کننده از برنامه شما مورد استفاده قرار گیرد.
ویژگی ها و روش های ایجاد شده در AppController در تمام کنترل کننده هایی که آن را گسترش می دهند در دسترس خواهد هستند.
روش ()initialize در انتهای سازنده کنترل به فراخوانی اجزاء، می پردازد.
در کلاس کنترل کننده methods ها در واقع Actions های فراخوانی شده ما هستند.
Actions ها نیز مسوئل ارسال پاسخ مناسب برای مرورگر / کاربر درخواست دهنده اند.
View نیز توسط نام action ارائه می گردد. برای مثال نام روش در کنترل کننده.
1 2 3 4 5 6 7 8 9 10 11 | class RecipesController extends AppController{ public function view($id){ // Action logic goes here. } public function share($customerId, $recipeId){ // Action logic goes here. } public function search($query){ // Action logic goes here. } } |
همانطور که در مثال فوق دیده می شود، RecipesController دارای سه action است : View، Share، و Search .
برای Redirecting کردن به action دیگر از یک کنترل کننده، می توانیم از روش ()setAction استفاده کنیم.
در ادامه می توانید سینتکس روش ()setAction را مشاهده نمایید.
1 | Cake\Controller\Controller::setAction($action, $args...) |
کد زیر کاربر را به سمت action یک کنترل کننده مشابه هدایت می کند.
1 | $this->setAction('index'); |
تغییرات زیر را در فایل config / routes.php را همانطور که در برنامه زیر نشان داده شده است اعمال نمایید.
config/routes.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php use Cake\Core\Plugin; use Cake\Routing\RouteBuilder; use Cake\Routing\Router; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/redirectcontroller',[' controller'=>'Redirects','action'=>'action1']); $routes->connect('/redirectcontroller2',[' controller'=>'Redirects','action'=>'action2']); $routes->fallbacks('DashedRoute'); }); Plugin::routes(); |
یک فایل RedirectsController.php را در src / Controller / RedirectsController.php ایجاد کنید سپس کد زیر را در فایل کنترل کننده کپی کنید.
src/Controller/RedirectsController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php namespace App\Controller; use App\Controller\AppController; use Cake\ORM\TableRegistry; use Cake\Datasource\ConnectionManager; class RedirectsController extends AppController{ public function action1(){ } public function action2(){ echo "redirecting from action2"; $this->setAction('action1'); } } ?> |
یک دایرکتور Redirects در src/Template بسازید و در زیر دایرکتوری یک فایل Viewfile با عنوان action1.ctp بسازید.
سپس کد زیر را در فایل کنترل کننده کپی کنید.
src/Template/Redirects/action1.ctp
1 | This is an example of how to redirect within controller. |
مثال بالا را با مراجعه به URL زیر اجرا نمایید.
http://localhost:85/CakePHP/redirect-controller
پس از اجرای آن، خروجی زیر را دریافت خواهید کرد.
اکنون، از آدرس زیر دیدن کنید:
http: // localhost: 85 / CakePHP / redirect-controller2
URL بالا به شما خروجی زیر را می دهد.
در CakePHP، یک مدل را می توان با استفاده از روش ()loadModel بارگذاری کرد.
در ادامه می توانید سینتکس روش ()loadModel را ببینید.
1 | Cake\Controller\Controller::loadModel(string $modelClass, string $type) |
دو نظر برای تابع فوق وجود دارد :
اگر می خواهید Articles مدل ها را در یک کنترل کننده بارگذاری کنید، می توانید آن را با نوشتن خط زیر در action کنترل، بارگذاری نمایید.
1 | $this->loadModel('Articles'); |
در این جلسه با آموزش کار با کنترل کننده ها در CakePHP همراه شما بودیم.
در جلسه بعدی می آموزیم که چگونه از View ها در CakePHP استفاده نماییم.
با پی وی لرن همراه باشید.