You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.9 KiB
78 lines
1.9 KiB
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Flight\FlightAbstract;
|
|
use Exception;
|
|
|
|
/**
|
|
* abstract controller to handle views and response from directus
|
|
*
|
|
*
|
|
* @author Björn Hase, Tentakelfabrik
|
|
* @license http://opensource.org/licenses/MIT The MIT License
|
|
* @link https://gitea.tentakelfabrik.de/Tentakelfabrik/super-gear-directus
|
|
*
|
|
*/
|
|
abstract class DirectusControllerAbstract extends FlightAbstract
|
|
{
|
|
/** default template for view */
|
|
protected $defaultView = NULL;
|
|
|
|
/**
|
|
* if item not found
|
|
*
|
|
* @param string $page
|
|
* @return boolean
|
|
*/
|
|
protected function notFound($item)
|
|
{
|
|
return (!$item || ($item && isset($item['error']) && $item['error']['code'] === 203));
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $view
|
|
* @return boolean
|
|
*/
|
|
protected function viewExists($view)
|
|
{
|
|
$result = false;
|
|
|
|
if (file_exists($this->app->get('flight.views.path').'/'.$view.'.blade.php')) {
|
|
$result = true;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param [type] $page [description]
|
|
* @param array $data [description]
|
|
* @return [type] [description]
|
|
*/
|
|
protected function render($page, $data = [])
|
|
{
|
|
$view = $this->defaultView;
|
|
|
|
// if view isset in page and file exists
|
|
if (isset($page['data']['view'])) {
|
|
if ($this->viewExists($page['data']['view'])) {
|
|
$view = $page['data']['view'];
|
|
} else {
|
|
throw new Exception('View '.$page['data']['view'].' not exists');
|
|
}
|
|
} else if (!$this->viewExists($view)) {
|
|
throw new Exception('View '.$view.' not exists');
|
|
}
|
|
|
|
$this->app->render($view, array_merge([
|
|
'page' => $page,
|
|
'flight' => $this->app
|
|
],
|
|
$data
|
|
));
|
|
}
|
|
}
|