კონტროლერები თქვენს MVC ფრეიმვორკში PHP-ში
როგორც უკვე იცით, ჩვენი ფრეიმვორკის
ყველა კონტროლერს აქვს მეთოდი render, რომელიც
საჭიროა გამოიძახოთ მონაცემების ჩვენებაში გასაგზავნად.
ეს მეთოდი ჩვენი, მომხმარებლური კონტროლერები
იღებენ მემკვიდრეობით მშობელ კლას Controller-ისგან,
რომელიც მდებარეობს ბირთვში. მოდით გავაკეთოთ ეს კლასი:
<?php
namespace Core;
class Controller
{
protected function render($view, $data) {
}
}
?>
როგორც ხედავთ, მეთოდი render პარამეტრად
იღებს ჩვენების სახელს და მონაცემებს
ჩვენებისთვის. მოდით, ეს მეთოდი დააბრუნებს
სპეციალური კლასის Page ობიექტს, რომელშიც
იქნება ინფორმაცია კონტროლერის მოქმედების მონაცემების
ჩვენების შესახებ. ამ კლასში
იქნება ჩვენების სახელი, მონაცემები,
ასევე გვერდის სათაური და საიტის ლეაუტის
ფაილის სახელი:
<?php
namespace Core;
class Page
{
private $layout;
private $title;
private $view;
private $data;
public function __construct($layout, $title, $view, $data)
{
$this->layout = $layout;
$this->title = $title;
$this->view = $view;
$this->data = $data;
}
public function __get($property)
{
return $this->$property;
}
}
?>
მაშინ ჩვენი მეთოდის render კოდი
ასე გამოიყურება:
<?php
namespace Core;
class Controller
{
protected $layout = 'default';
protected function render($view, $data) {
return new Page($this->layout, $this->title, $view, $data);
}
}
?>
აგიხსნით, რა ხდება აქ. ჩვენების სახელი
და მონაცემები მოდის მეთოდის პარამეტრებით. თუმცა,
მომხმარებლურ კონტროლერში დაყენებულია აგრეთვე
გვერდის სათაური - title თვისების
მინიჭებით. ეს ნიშნავს, რომ $this->title-ში
იქნება ის სათაური, რომელსაც ჩვენ გადავცემთ
Page კლასის კონსტრუქტორს.
ლეაუტთან დაკავშირებითაც არის ნიუანსები. როგორც იცით,
ჩვენი ფრეიმვორკი იყენებს ლეაუტს ფაილიდან
default.php. სინამდვილეში, თითოეულ
მოქმედებას შეიძლება ჰქონდეს სხვა ლეაუტიც. ამისთვის
საჭიროა თავად მოქმედებაში layout თვისებაში
ჩაიწეროს ლეაუტის სხვა სახელი.
როგორ მიიღწევა ეს: ჩვენ მშობელ კონტროლერს
აქვს თვისება layout, რომელსაც ნაგულისხმევად
აქვს მნიშვნელობა 'default.php'. ეს
იქნება ნაგულისხმევი ლეაუტი. თუმცა, თუ
მომხმარებლური კონტროლერის მოქმედება გადააწერს
layout თვისების მნიშვნელობას, მაშინ ლეაუტიც
სხვა იქნება.
დააკოპირეთ ჩემი კლასის Controller კოდი და მოათავსეთ იგი ფაილში
/core/Controller.php.
დააკოპირეთ ჩემი კლასის Page კოდი და
მოათავსეთ იგი ფაილში /core/Page.php.