Flight atbalsta maršrutu un grupu maršrutu starpējo kodolu. Starpējais kodols ir funkcija, kas tiek izpildīta pirms (vai pēc) maršruta atzvana. Tas ir lielisks veids, kā pievienot API autentifikācijas pārbaudes jūsu kodā vai validēt, vai lietotājam ir atļauja piekļūt maršrutam.
Šeit ir pamata piemērs:
// Ja sniedzat tikai anonīmu funkciju, tā tiks izpildīta pirms maršruta atzvanīšanas. // nav "pēc" maršrutu starpējo funkciju, izņemot klases (skatīt zemāk) Flight::route('/ceļš', function() { echo ' Šeit es esmu!'; })->addMiddleware(function() { echo 'Starpējais kodols pirmais!'; }); Flight::start(); // Tas izvadīs "Starpējais kodols pirmais! Šeit es esmu!"
Ir daži ļoti svarīgi punkti par starpējo kodolu, par kuriem jums jābūt informētiem, pirms to izmantojat:
Flight::redirect()
function($params) { ... }
public function before($params) {}
flight\Engine
__construct()
Starpējais kodols var tikt reģistrēts kā klase arī. Ja jums nepieciešama "pēc" funkcionalitāte, jums obligāti jāizmanto klase.
class ManaStarpejaisKlase { public function before($params) { echo 'Starpējais kodols pirmais!'; } public function after($params) { echo 'Starpējais kodols pēdējais!'; } } $ManaStarpejaisKlase = new ManaStarpejaisKlase(); Flight::route('/ceļš', function() { echo ' Šeit es esmu! '; })->addMiddleware($ManaStarpejaisKlase); // arī ->addMiddleware([ $ManaStarpejaisKlase, $ManaStarpejaisKlase2 ]); Flight::start(); // Tas parādīs "Starpējais kodols pirmais! Šeit es esmu! Starpējais kodols pēdējais!"
Iedomāsimies, ka jums ir autentifikācijas starpējais kodols, un jūs vēlaties novirzīt lietotāju uz pieteikšanās lapu, ja viņi nav autentificējušies. Jums ir dažas iespējas, ar kurām varat rīkoties:
Šeit ir vienkāršs atgriešanas false; piemērs:
class ManaStarpejaisKlase { public function before($params) { if (isset($_SESSION['lietotajs']) === false) { return false; } // jo tas ir true, viss vienkārši turpinās } }
Šeit ir piemērs, kā novirzīt lietotāju uz pieteikšanās lapu:
class ManaStarpejaisKlase { public function before($params) { if (isset($_SESSION['lietotajs']) === false) { Flight::redirect('/pieteikties'); exit; } } }
Iedomāsimies, ka jums ir jāizvada JSON kļūda, jo jūs izstrādājat API. Tas var izskatīties šādi:
class ManaStarpejaisKlase { public function before($params) { $autentifikācija = Flight::request()->headers['Autorizācija']; if(empty($autentifikācija)) { Flight::jsonHalt(['kļūda' => 'Lai piekļūtu šai lapai, ir jābūt pierakstītam sistēmā.'], 403); // vai Flight::json(['kļūda' => 'Lai piekļūtu šai lapai, ir jābūt pierakstītam sistēmā.'], 403); exit; // vai Flight::halt(403, json_encode(['kļūda' => 'Lai piekļūtu šai lapai, ir jābūt pierakstītam sistēmā.']); } } }
Jūs varat pievienot maršruta grupu, un tad katram maršrutam šajā grupā būs vienāds starpējais kodols. Tas ir noderīgi, ja jums jāgrupē daudzi maršruti, piemēram, ar Autentifikācijas starpējo kodolu, lai pārbaudītu galvenes API atslēgu.
// pievienots grupas metodei beigās Flight::group('/api', function() { // Šis "tukšais" izskatās maršruts faktiski sakrīt ar /api Flight::route('', function() { echo 'api'; }, false, 'api'); // Tas sakrīt ar /api/lietotāji Flight::route('/lietotāji', function() { echo 'lietotāji'; }, false, 'lietotaji'); // Tas sakrīt ar /api/lietotāji/1234 Flight::route('/lietotāji/@id', function($id) { echo 'lietotājs:'.$id; }, false, 'skatīt_lietotāju'); }, [ new ApiAuthMiddleware() ]);
Ja jūs vēlaties piemērot globālu starpējo kodolu visiem savas maršrutkārtas, jūs varat pievienot "tukšu" grupu:
// pievienots grupas metodei beigās Flight::group('', function() { // Tas joprojām ir /lietotāji Flight::route('/lietotāji', function() { echo 'lietotāji'; }, false, 'lietotaji'); // Un tas joprojām ir /lietotāji/1234 Flight::route('/lietotāji/@id', function($id) { echo 'lietotājs:'.$id; }, false, 'skatīt_lietotāju'); }, [ new ApiAuthMiddleware() ]);