#0 | Phalcon\Mvc\Model\Query->execute() |
#1 | Phalcon\Mvc\Model::findFirst(Array([conditions] => theme = :theme: AND key = :key:, [bind] => Array([theme] => hotmagazine, [key] => sidebar-post), [cache] => Array([key] => sidebarPost, [lifetime] => 300)))
/home/congvieclamtn/app/themes/hotmagazine/modules/Post/Controller/IndexController.php (211) <?php
namespace Post\Controller;
use FrontEnd\Controller\LoaderController;
use PhalartCMS\Plugin\Shortcode;
use Post\Model\Post;
use Lib\Category\Model\Category;
use Post\Model\Helper\PostHelper;
use Lib\Tag\Model\Tag;
use Lib\Theme\Model\Theme as ThemeBase;
class IndexController extends LoaderController
{
public function initialize()
{
parent::initialize();
}
public function indexAction()
{
}
public function detailAction()
{
$this->view->bodyClass = 'home';
$id = $this->dispatcher->getParam('id', array('int'), '');
$testing = $this->request->getQuery('testing', array('int'), '');
$post = Post::findFirst([
'conditions' => 'id = :id: AND status = :status:',
'bind' => [
'id' => $id,
'status' => 'publish',
],
'cache' => [
'key' => 'postDetail' . $id,
'lifetime' => 300,
],
]);
if($testing == 1) {
//var_dump($post); die;
}
if ($id == 46896) {
$post = Post::findFirst([
'conditions' => 'id = :id: AND status = :status:',
'bind' => [
'id' => $id,
'status' => 'publish',
]
]);
}
$slug = $this->dispatcher->getParam('slug', array('striptags', 'trim', 'lower'), '');
if(!$post) {
$this->error404();
return $this->response;
}
if (!$this->session->has('post_' . $id)) {
$post->hits += 1;
$post->update();
$this->session->set('post_' . $id, 1);
}
$categoryId = $post->getPostCategory()->toArray()[0]['category_id'];
$categoryModel = Category::findFirst($categoryId);
$breadcrumb = [
[
'title' => 'Trang chủ',
'url' => '/',
'active' => false
],
[
'title' => $categoryModel->getName(),
'url' => $this->url->get(['for' => 'post_category', 'slug' => $categoryModel->getSlug()]),
'active' => false
],
[
'title' => $post->getTitle(),
'url' => $this->url->get(['for' => 'post_detail', 'slug' => $post->getSlug(), 'id' => $post->getId()]),
'active' => true
]
];
$this->helper->breadcrumb($breadcrumb, true);
$this->view->categoryId = $categoryId;
$this->view->post = $post;
$this->view->domain = 'http://' . $_SERVER['SERVER_NAME'];
$meta_title = (!empty($post->getPostContent()->meta_title)) ? $post->getPostContent()->meta_title : $post->getTitle();
$meta_description = (!empty($post->getPostContent()->meta_description)) ? $post->getPostContent()->meta_description : $post->getTitle();
$meta_keyword = (!empty($post->getPostContent()->meta_keyword)) ? $post->getPostContent()->meta_keyword : $post->getTitle();
$this->helper->title()->append($meta_title);
$this->helper->meta()->set('description',$meta_description);
$this->helper->meta()->set('keywords', $meta_keyword);
$this->helper->meta()->setFb('og:description',$meta_description);
$this->helper->meta()->setFb('og:keywords', $meta_keyword);
$this->helper->meta()->setFb('og:image', BASE_URL . '/' . $post->getImage());
$this->helper->meta()->setFb('og:url', $this->router->getRewriteUri());
$this->helper->meta()->setFb('og:title', $meta_title);
$postHelper = new PostHelper();
unset($params);
$params['limit'] = 5;
$params['conditions']['type'] = 'F';
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'F'
]
)));
$tabFeaturePost = $this->cache->get($cacheName);
if (!$tabFeaturePost) {
$tabFeaturePost = $postHelper->getList($params);
$this->cache->save($cacheName, $tabFeaturePost);
}
//$tabFeaturePost = $postHelper->getList($params);
unset($params);
$params['limit'] = 5;
$params['conditions']['type'] = 'H';
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'H'
]
)));
$tabHotPost = $this->cache->get($cacheName);
if (!$tabHotPost) {
$tabHotPost = $postHelper->getList($params);
$this->cache->save($cacheName, $tabHotPost);
}
//$tabHotPost = $postHelper->getList($params);
unset($params);
$params['limit'] = 5;
$params['order'] = 'p.hits DESC';
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'tabMostView'
]
)));
$tabMostView = $this->cache->get($cacheName);
if (!$tabMostView) {
$tabMostView = $postHelper->getList($params);
$this->cache->save($cacheName, $tabMostView);
}
//$tabMostView = $postHelper->getList($params);
$topTags = Tag::find([
'limit' => 10,
'order' => 'count DESC'
]);
unset($params);
$params['limit'] = 3;
$params['conditions']['module'] = 'video';
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'videos'
]
)));
$videos = $this->cache->get($cacheName);
if (!$videos) {
$videos = $postHelper->getList($params);
$this->cache->save($cacheName, $videos);
}
//$videos = $postHelper->getList($params);
unset($params);
$params['limit'] = 6;
$params['conditions']['not_id'] = $post->id;
$params['conditions']['category_id'] = $categoryId;
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'postRelate'
]
)));
$postRelate = $this->cache->get($cacheName);
if (!$postRelate) {
$postRelate = $postHelper->getList($params);
$this->cache->save($cacheName, $postRelate);
}
//$postRelate = $postHelper->getList($params);
unset($params);
$params['conditions']['id'] = $id;
$cacheName = md5(serialize(array(
[
'IndexController',
'indexAction',
'listPost'
]
)));
$listPost = $this->cache->get($cacheName);
if (!$listPost) {
$listPost = $postHelper->getList($params);
$this->cache->save($cacheName, $listPost);
}
//$listPost = $postHelper->getOne($params);
$sidebarPost = ThemeBase::findFirst([
'conditions' => 'theme = :theme: AND key = :key:',
'bind' => [
'theme' => THEME,
'key' => 'sidebar-post'
],
'cache' => [
'key' => 'sidebarPost',
'lifetime' => 300,
]
]);
$positionSidebarPost = [];
if ($sidebarPost) {
$sidebarPost = unserialize($sidebarPost->value);
foreach ($sidebarPost as $key => &$widget) {
$tmp = explode('-', $widget);
$origin = $tmp;
array_pop($tmp);
$typeWidget = implode('-', $tmp);
$keyWidget = end($origin);
$model = ThemeBase::findFirst([
'conditions' => 'key = :key: AND theme = :theme:',
'bind' => [
'key' => $typeWidget,
'theme' => THEME
]
]);
$listTypeWidget['key'] = $keyWidget;
$listTypeWidget['name'] = $typeWidget;
$listTypeWidget['slug'] = $typeWidget . '-' . $keyWidget;
$listTypeWidget['detail'] = unserialize($model->value)[$keyWidget];
$positionSidebarPost[] = $listTypeWidget;
}
}
if($testing == 1) {
var_dump($listPost); die;
}
$this->view->setVars([
'tabFeaturePost' => $tabFeaturePost,
'tabMostView' => $tabMostView,
'tabHotPost' => $tabHotPost,
'topTags' => $topTags,
'videos' => $videos,
'postHelper' => $listPost,
'postRelate' => $postRelate,
'sidebarPost' => $positionSidebarPost
]);
$this->view->pick('Post/index/detail');
}
public function searchAction()
{
$keyword = $this->request->getQuery('keywork');
var_dump('sadfsa'); die;
if (!empty($keyword)) {
$postHelper = new \Lib\Post\Model\Helper\PostHelper();
$params['keyword'] = $keyword;
$list = $postHelper->getList($params);
var_dump($list); die;
}
}
}
|
#2 | Post\Controller\IndexController->detailAction(trao-tang-may-loc-nuoc-cho-nhan-dan-vung-han-man-tien-giang, 40285) |
#3 | Phalcon\Dispatcher->callActionMethod(Object(Post\Controller\IndexController), detailAction, Array([slug] => trao-tang-may-loc-nuoc-cho-nhan-dan-vung-han-man-tien-giang, [id] => 40285)) |
#4 | Phalcon\Dispatcher->dispatch()
/home/congvieclamtn/app/Bootstrap.php (376) <?php
namespace PhalartCMS;
use Application\Cache\Manager as CacheManager;
use Cms\Model\Configuration as CmsConfiguration;
use \PhalartCMS\Plugin\CheckPoint as CheckPointPlugin;
use \PhalartCMS\Plugin\Localization as LocalizationPlugin;
use \PhalartCMS\Plugin\AdminLocalization as AdminLocalizationPlugin;
use \PhalartCMS\Plugin\Acl as AclPlugin;
use \PhalartCMS\Plugin\MobileDetect as MobileDetectPlugin;
use PhalartCMS\Plugin\Shortcode;
use \PhalartCMS\Plugin\Title as TitlePlugin;
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
if (APPLICATION_ENV == 'development') {
date_default_timezone_set('Asia/Bangkok');
ini_set('display_errors', true);
error_reporting(E_ALL);
}
define('ROOT_APP', __DIR__);
class Bootstrap
{
public function run()
{
$di = new \Phalcon\DI\FactoryDefault();
$application = include_once APPLICATION_PATH . '/config/environment/' . APPLICATION_ENV . '.php';
$config_default = [
'base_path' => (isset($application['base_path'])) ? $application['base_path'] : null,
'base_uri' => (isset($application['base_uri'])) ? $application['base_uri'] : null,
'database' => (isset($application['database'])) ? $application['database'] : null,
'cache' => (isset($application['cache'])) ? $application['cache'] : null,
'memcache' => (isset($application['memcache'])) ? $application['memcache'] : null,
'memcached' => (isset($application['memcached'])) ? $application['memcached'] : null,
'assets' => (isset($application['assets'])) ? $application['assets'] : null,
];
$config = new \Phalcon\Config($config_default);
// Database
$db = new \Phalcon\Db\Adapter\Pdo\Mysql([
"host" => $config->database->host,
"username" => $config->database->username,
"password" => $config->database->password,
"dbname" => $config->database->dbname,
"charset" => $config->database->charset,
]);
$di->set('db', $db);
// Config
$result = $db->fetchOne(
"SELECT * FROM `cms_configuration` WHERE `key` = 'THEME'"
);
$theme = $result['value'];
define('THEME', $theme);
define('THEME_PATH', __DIR__ . '/themes/' . $theme);
require_once LIBRARY_PATH . '/modules/Cms/ConfigApp.php';
$config2 = \Cms\ConfigApp::get();
$config->merge($config2);
$di->set('config', $config);
// Registry
$registry = new \Phalcon\Registry();
$di->set('registry', $registry);
// Loader
$loader = new \Phalcon\Loader();
$loader->registerNamespaces($config->loader->namespaces->toArray());
$loader->registerDirs([LIBRARY_PATH . "/plugins/"]);
$loader->registerFiles([APPLICATION_PATH . '/../vendor/autoload.php']);
$loader->register();
// Get Option setting
$di->set('options', new \PhalartCMS\Plugin\Options());
// Get Option setting
// View
$this->initView($di);
$this->initSimpleView($di);
// URL
$url = new \Phalcon\Mvc\Url();
$url->setBasePath($config->base_path);
$url->setBaseUri($config->base_path);
$di->set('url', $url);
// Cache
$this->initCache($di);
// CMS
$cmsModel = new CmsConfiguration();
$registry->cms = $cmsModel->getConfig(); // Отправляем в Registry
// Application
$application = new \Phalcon\Mvc\Application();
$application->registerModules($config->modules->toArray());
// Events Manager, Dispatcher
$this->initEventManager($di);
// Session
$session = new \Phalcon\Session\Adapter\Files();
$session->start();
$di->set('session', $session);
$acl = new \Application\Acl\DefaultAcl();
$di->set('acl', $acl);
// JS Assets
$this->initAssetsManager($di);
// Flash helper
$flash = new \Phalcon\Flash\Session([
'error' => 'alert alert-danger',
'success' => 'alert alert-success',
'notice' => 'alert alert-info',
'warning' => 'alert alert-warning',
]);
$flash->setAutoescape(false);
$di->set('flash', $flash);
$di->set('helper', new \Application\Mvc\Helper());
// Routing
$this->initRouting($application, $di);
$application->setDI($di);
$di->setShared('shortcode', new Shortcode($application));
// Main dispatching process
$response = $this->dispatch($di);
$response->send();
}
private function initRouting($application, $di)
{
$router = new \Application\Mvc\Router\DefaultRouter();
$router->setDi($di);
foreach ($application->getModules() as $module) {
$routesClassName = str_replace('Module', 'Routes', $module['className']);
if (class_exists($routesClassName)) {
$routesClass = new $routesClassName();
$router = $routesClass->init($router);
}
$initClassName = str_replace('Module', 'Init', $module['className']);
if (class_exists($initClassName)) {
new $initClassName();
}
}
$di->set('router', $router);
}
private function initAssetsManager($di)
{
$config = $di->get('config');
$assetsManager = new \Application\Assets\Manager();
$js_collection = $assetsManager->collection('js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/js.js')
->setTargetUri('assets/js.js')
->join(true);
if ($config->assets->js) {
foreach ($config->assets->js as $js) {
$js_collection->addJs(ROOT . '/' . $js);
}
}
// Admin JS Assets
$assetsManager->collection('modules-admin-js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/modules-admin.js')
->setTargetUri('assets/modules-admin.js')
->join(true);
// Admin LESS Assets
$assetsManager->collection('modules-admin-less')
->setLocal(true)
->addFilter(new \Application\Assets\Filter\Less())
->setTargetPath(ROOT . '/assets/modules-admin.less')
->setTargetUri('assets/modules-admin.less')
->join(true)
->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less');
$di->set('assets', $assetsManager);
}
private function initEventManager($di)
{
$eventsManager = new \Phalcon\Events\Manager();
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) {
new CheckPointPlugin($di->get('request'));
new LocalizationPlugin($dispatcher);
new AdminLocalizationPlugin($di->get('config'));
new AclPlugin($di->get('acl'), $dispatcher, $di->get('view'));
new MobileDetectPlugin($di->get('session'), $di->get('view'), $di->get('request'));
});
$eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) {
new \Seo\Plugin\SeoManager($dispatcher, $di->get('request'), $di->get('router'), $di->get('view'));
new TitlePlugin($di);
});
// Profiler
$registry = $di->get('registry');
if ($registry->cms['PROFILER']) {
$profiler = new \Phalcon\Db\Profiler();
$di->set('profiler', $profiler);
$eventsManager->attach('db', function ($event, $db) use ($profiler) {
if ($event->getType() == 'beforeQuery') {
$profiler->startProfile($db->getSQLStatement());
}
if ($event->getType() == 'afterQuery') {
$profiler->stopProfile();
}
});
}
$db = $di->get('db');
$db->setEventsManager($eventsManager);
$dispatcher->setEventsManager($eventsManager);
$di->set('dispatcher', $dispatcher);
}
private function initView($di)
{
$view = new \Phalcon\Mvc\View();
$theme = THEME;
define('MAIN_VIEW_PATH', ROOT_APP . "/themes/{$theme}/views/");
/*$view->setViewsDir(MAIN_VIEW_PATH);
$view->setPartialsDir(MAIN_VIEW_PATH . "/partials/");
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW);*/
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions([
'compiledPath' => APPLICATION_PATH . '/../data/cache/volt/',
'compileAlways' => !(APPLICATION_ENV == 'development'),
]);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$ajax = $di->get('request')->getQuery('_ajax');
if ($ajax) {
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT);
}
$di->set('view', $view);
return $view;
}
private function initSimpleView($di)
{
$view = new \Phalcon\Mvc\View\Simple();
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$di->set('simpleView', $view);
return $view;
}
private function initCache($di)
{
$config = $di->get('config');
$cacheFrontend = new \Phalcon\Cache\Frontend\Data([
"lifetime" => 60,
"prefix" => HOST_HASH,
]);
$cache = null;
switch ($config->cache) {
case 'file':
$cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [
"cacheDir" => APPLICATION_PATH . "/../data/cache/backend/"
]);
break;
case 'memcache':
$cache = new \Phalcon\Cache\Backend\Memcache(
$cacheFrontend, [
"host" => $config->memcache->host,
"port" => $config->memcache->port,
]);
break;
case 'memcached':
$cache = new \Phalcon\Cache\Backend\Libmemcached(
$cacheFrontend, [
"host" => $config->memcached->host,
"port" => $config->memcached->port,
]);
break;
}
$di->set('cache', $cache, true);
$di->set('modelsCache', $cache, true);
\Application\Widget\Proxy::$cache = $cache; // Modules Widget System
$modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
$di->set('modelsMetadata', $modelsMetadata);
$di->set('cacheManager', new CacheManager());
}
private function dispatch($di)
{
$router = $di['router'];
$router->handle();
$view = $di['view'];
$dispatcher = $di['dispatcher'];
$response = $di['response'];
$dispatcher->setModuleName($router->getModuleName());
$dispatcher->setControllerName($router->getControllerName());
$dispatcher->setActionName($router->getActionName());
$dispatcher->setParams($router->getParams());
$moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName());
$ModuleClassName = $moduleName . '\Module';
if (class_exists($ModuleClassName)) {
$module = new $ModuleClassName;
$module->registerAutoloaders();
$module->registerServices($di);
}
$view->start();
$registry = $di['registry'];
if ($registry->cms['DEBUG_MODE']) {
$debug = new \Phalcon\Debug();
$debug->listen();
$dispatcher->dispatch();
} else {
try {
$dispatcher->dispatch();
} catch (\Phalcon\Exception $e) {
// Errors catching
$view->setViewsDir(__DIR__ . '/modules/Index/views/');
$view->setPartialsDir('');
$view->e = $e;
if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) {
$response->setStatusCode(404, 'Not Found');
$view->partial('error/error404');
} else {
$response->setStatusCode(503, 'Service Unavailable');
$view->partial('error/error503');
}
return $response;
}
}
$view->render(
$dispatcher->getControllerName(),
$dispatcher->getActionName(),
$dispatcher->getParams()
);
$view->finish();
// AJAX
$request = $di['request'];
$_ajax = $request->getQuery('_ajax');
if ($_ajax) {
$contents = $view->getContent();
$return = new \stdClass();
$return->html = $contents;
$return->title = $di->get('helper')->title()->get();
$return->success = true;
if ($view->bodyClass) {
$return->bodyClass = $view->bodyClass;
}
$headers = $response->getHeaders()->toArray();
if (isset($headers[404]) || isset($headers[503])) {
$return->success = false;
}
$response->setContentType('application/json', 'UTF-8');
$response->setContent(json_encode($return));
} else {
$response->setContent($view->getContent());
}
return $response;
}
}
|
#5 | PhalartCMS\Bootstrap->dispatch(Object(Phalcon\Di\FactoryDefault))
/home/congvieclamtn/app/Bootstrap.php (142) <?php
namespace PhalartCMS;
use Application\Cache\Manager as CacheManager;
use Cms\Model\Configuration as CmsConfiguration;
use \PhalartCMS\Plugin\CheckPoint as CheckPointPlugin;
use \PhalartCMS\Plugin\Localization as LocalizationPlugin;
use \PhalartCMS\Plugin\AdminLocalization as AdminLocalizationPlugin;
use \PhalartCMS\Plugin\Acl as AclPlugin;
use \PhalartCMS\Plugin\MobileDetect as MobileDetectPlugin;
use PhalartCMS\Plugin\Shortcode;
use \PhalartCMS\Plugin\Title as TitlePlugin;
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
if (APPLICATION_ENV == 'development') {
date_default_timezone_set('Asia/Bangkok');
ini_set('display_errors', true);
error_reporting(E_ALL);
}
define('ROOT_APP', __DIR__);
class Bootstrap
{
public function run()
{
$di = new \Phalcon\DI\FactoryDefault();
$application = include_once APPLICATION_PATH . '/config/environment/' . APPLICATION_ENV . '.php';
$config_default = [
'base_path' => (isset($application['base_path'])) ? $application['base_path'] : null,
'base_uri' => (isset($application['base_uri'])) ? $application['base_uri'] : null,
'database' => (isset($application['database'])) ? $application['database'] : null,
'cache' => (isset($application['cache'])) ? $application['cache'] : null,
'memcache' => (isset($application['memcache'])) ? $application['memcache'] : null,
'memcached' => (isset($application['memcached'])) ? $application['memcached'] : null,
'assets' => (isset($application['assets'])) ? $application['assets'] : null,
];
$config = new \Phalcon\Config($config_default);
// Database
$db = new \Phalcon\Db\Adapter\Pdo\Mysql([
"host" => $config->database->host,
"username" => $config->database->username,
"password" => $config->database->password,
"dbname" => $config->database->dbname,
"charset" => $config->database->charset,
]);
$di->set('db', $db);
// Config
$result = $db->fetchOne(
"SELECT * FROM `cms_configuration` WHERE `key` = 'THEME'"
);
$theme = $result['value'];
define('THEME', $theme);
define('THEME_PATH', __DIR__ . '/themes/' . $theme);
require_once LIBRARY_PATH . '/modules/Cms/ConfigApp.php';
$config2 = \Cms\ConfigApp::get();
$config->merge($config2);
$di->set('config', $config);
// Registry
$registry = new \Phalcon\Registry();
$di->set('registry', $registry);
// Loader
$loader = new \Phalcon\Loader();
$loader->registerNamespaces($config->loader->namespaces->toArray());
$loader->registerDirs([LIBRARY_PATH . "/plugins/"]);
$loader->registerFiles([APPLICATION_PATH . '/../vendor/autoload.php']);
$loader->register();
// Get Option setting
$di->set('options', new \PhalartCMS\Plugin\Options());
// Get Option setting
// View
$this->initView($di);
$this->initSimpleView($di);
// URL
$url = new \Phalcon\Mvc\Url();
$url->setBasePath($config->base_path);
$url->setBaseUri($config->base_path);
$di->set('url', $url);
// Cache
$this->initCache($di);
// CMS
$cmsModel = new CmsConfiguration();
$registry->cms = $cmsModel->getConfig(); // Отправляем в Registry
// Application
$application = new \Phalcon\Mvc\Application();
$application->registerModules($config->modules->toArray());
// Events Manager, Dispatcher
$this->initEventManager($di);
// Session
$session = new \Phalcon\Session\Adapter\Files();
$session->start();
$di->set('session', $session);
$acl = new \Application\Acl\DefaultAcl();
$di->set('acl', $acl);
// JS Assets
$this->initAssetsManager($di);
// Flash helper
$flash = new \Phalcon\Flash\Session([
'error' => 'alert alert-danger',
'success' => 'alert alert-success',
'notice' => 'alert alert-info',
'warning' => 'alert alert-warning',
]);
$flash->setAutoescape(false);
$di->set('flash', $flash);
$di->set('helper', new \Application\Mvc\Helper());
// Routing
$this->initRouting($application, $di);
$application->setDI($di);
$di->setShared('shortcode', new Shortcode($application));
// Main dispatching process
$response = $this->dispatch($di);
$response->send();
}
private function initRouting($application, $di)
{
$router = new \Application\Mvc\Router\DefaultRouter();
$router->setDi($di);
foreach ($application->getModules() as $module) {
$routesClassName = str_replace('Module', 'Routes', $module['className']);
if (class_exists($routesClassName)) {
$routesClass = new $routesClassName();
$router = $routesClass->init($router);
}
$initClassName = str_replace('Module', 'Init', $module['className']);
if (class_exists($initClassName)) {
new $initClassName();
}
}
$di->set('router', $router);
}
private function initAssetsManager($di)
{
$config = $di->get('config');
$assetsManager = new \Application\Assets\Manager();
$js_collection = $assetsManager->collection('js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/js.js')
->setTargetUri('assets/js.js')
->join(true);
if ($config->assets->js) {
foreach ($config->assets->js as $js) {
$js_collection->addJs(ROOT . '/' . $js);
}
}
// Admin JS Assets
$assetsManager->collection('modules-admin-js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/modules-admin.js')
->setTargetUri('assets/modules-admin.js')
->join(true);
// Admin LESS Assets
$assetsManager->collection('modules-admin-less')
->setLocal(true)
->addFilter(new \Application\Assets\Filter\Less())
->setTargetPath(ROOT . '/assets/modules-admin.less')
->setTargetUri('assets/modules-admin.less')
->join(true)
->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less');
$di->set('assets', $assetsManager);
}
private function initEventManager($di)
{
$eventsManager = new \Phalcon\Events\Manager();
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) {
new CheckPointPlugin($di->get('request'));
new LocalizationPlugin($dispatcher);
new AdminLocalizationPlugin($di->get('config'));
new AclPlugin($di->get('acl'), $dispatcher, $di->get('view'));
new MobileDetectPlugin($di->get('session'), $di->get('view'), $di->get('request'));
});
$eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) {
new \Seo\Plugin\SeoManager($dispatcher, $di->get('request'), $di->get('router'), $di->get('view'));
new TitlePlugin($di);
});
// Profiler
$registry = $di->get('registry');
if ($registry->cms['PROFILER']) {
$profiler = new \Phalcon\Db\Profiler();
$di->set('profiler', $profiler);
$eventsManager->attach('db', function ($event, $db) use ($profiler) {
if ($event->getType() == 'beforeQuery') {
$profiler->startProfile($db->getSQLStatement());
}
if ($event->getType() == 'afterQuery') {
$profiler->stopProfile();
}
});
}
$db = $di->get('db');
$db->setEventsManager($eventsManager);
$dispatcher->setEventsManager($eventsManager);
$di->set('dispatcher', $dispatcher);
}
private function initView($di)
{
$view = new \Phalcon\Mvc\View();
$theme = THEME;
define('MAIN_VIEW_PATH', ROOT_APP . "/themes/{$theme}/views/");
/*$view->setViewsDir(MAIN_VIEW_PATH);
$view->setPartialsDir(MAIN_VIEW_PATH . "/partials/");
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW);*/
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions([
'compiledPath' => APPLICATION_PATH . '/../data/cache/volt/',
'compileAlways' => !(APPLICATION_ENV == 'development'),
]);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$ajax = $di->get('request')->getQuery('_ajax');
if ($ajax) {
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT);
}
$di->set('view', $view);
return $view;
}
private function initSimpleView($di)
{
$view = new \Phalcon\Mvc\View\Simple();
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$di->set('simpleView', $view);
return $view;
}
private function initCache($di)
{
$config = $di->get('config');
$cacheFrontend = new \Phalcon\Cache\Frontend\Data([
"lifetime" => 60,
"prefix" => HOST_HASH,
]);
$cache = null;
switch ($config->cache) {
case 'file':
$cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [
"cacheDir" => APPLICATION_PATH . "/../data/cache/backend/"
]);
break;
case 'memcache':
$cache = new \Phalcon\Cache\Backend\Memcache(
$cacheFrontend, [
"host" => $config->memcache->host,
"port" => $config->memcache->port,
]);
break;
case 'memcached':
$cache = new \Phalcon\Cache\Backend\Libmemcached(
$cacheFrontend, [
"host" => $config->memcached->host,
"port" => $config->memcached->port,
]);
break;
}
$di->set('cache', $cache, true);
$di->set('modelsCache', $cache, true);
\Application\Widget\Proxy::$cache = $cache; // Modules Widget System
$modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
$di->set('modelsMetadata', $modelsMetadata);
$di->set('cacheManager', new CacheManager());
}
private function dispatch($di)
{
$router = $di['router'];
$router->handle();
$view = $di['view'];
$dispatcher = $di['dispatcher'];
$response = $di['response'];
$dispatcher->setModuleName($router->getModuleName());
$dispatcher->setControllerName($router->getControllerName());
$dispatcher->setActionName($router->getActionName());
$dispatcher->setParams($router->getParams());
$moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName());
$ModuleClassName = $moduleName . '\Module';
if (class_exists($ModuleClassName)) {
$module = new $ModuleClassName;
$module->registerAutoloaders();
$module->registerServices($di);
}
$view->start();
$registry = $di['registry'];
if ($registry->cms['DEBUG_MODE']) {
$debug = new \Phalcon\Debug();
$debug->listen();
$dispatcher->dispatch();
} else {
try {
$dispatcher->dispatch();
} catch (\Phalcon\Exception $e) {
// Errors catching
$view->setViewsDir(__DIR__ . '/modules/Index/views/');
$view->setPartialsDir('');
$view->e = $e;
if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) {
$response->setStatusCode(404, 'Not Found');
$view->partial('error/error404');
} else {
$response->setStatusCode(503, 'Service Unavailable');
$view->partial('error/error503');
}
return $response;
}
}
$view->render(
$dispatcher->getControllerName(),
$dispatcher->getActionName(),
$dispatcher->getParams()
);
$view->finish();
// AJAX
$request = $di['request'];
$_ajax = $request->getQuery('_ajax');
if ($_ajax) {
$contents = $view->getContent();
$return = new \stdClass();
$return->html = $contents;
$return->title = $di->get('helper')->title()->get();
$return->success = true;
if ($view->bodyClass) {
$return->bodyClass = $view->bodyClass;
}
$headers = $response->getHeaders()->toArray();
if (isset($headers[404]) || isset($headers[503])) {
$return->success = false;
}
$response->setContentType('application/json', 'UTF-8');
$response->setContent(json_encode($return));
} else {
$response->setContent($view->getContent());
}
return $response;
}
}
|
#6 | PhalartCMS\Bootstrap->run()
/home/congvieclamtn/public/index.php (46) <?php
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
chdir(dirname(__DIR__));
define('ROOT', __DIR__);
define('HOST_HASH', substr(md5($_SERVER['HTTP_HOST']), 0, 12));
if (isset($_SERVER['APPLICATION_ENV'])) {
$applicationEnv = ($_SERVER['APPLICATION_ENV'] ? $_SERVER['APPLICATION_ENV'] : 'production');
} else {
$applicationEnv = (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production');
}
// if (!isset($_GET['dev'])) {
// echo "dang bao tri";
// die;
// }
define('APPLICATION_ENV', $applicationEnv);
define('BASE_URL', (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]");
$actual_link = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parts = parse_url($actual_link);
$prefix = substr($parts['path'], 1);
$part = explode('/', $prefix);
$admin = 'admin';
$theme = 'blog';
//define('THEME', $theme);
if ($part[0] != $admin) {
define('IS_ADMIN', false);
define('APPLICATION_PATH', __DIR__ . '/../app');
require_once APPLICATION_PATH . '/Bootstrap.php';
} else {
define('IS_ADMIN', true);
define('APPLICATION_PATH', __DIR__ . '/../admin');
define('ADMINISTRATOR_PATH', __DIR__ . '/../admin');
require_once ADMINISTRATOR_PATH . '/Bootstrap.php';
}
define('LIBRARY_PATH', __DIR__ . '/../library');
$bootstrap = new PhalartCMS\Bootstrap();
$bootstrap->run();
|