Class luya\web\Bootstrap
| Inheritance | luya\web\Bootstrap ยป luya\base\BaseBootstrap |
|---|---|
| Implements | yii\base\BootstrapInterface |
| Available since version | 1.0.0 |
| Source Code | https://github.com/luyadev/luya/blob/master/core/web/Bootstrap.php |
LUYA base bootstrap class which will be called during the bootstraping process.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| beforeRun() | Before bootstrap run process. | luya\web\Bootstrap |
| bootstrap() | Boostrap method will be invoken by Yii Application bootrapping proccess containing the Application ($app) Object to get/set data. | luya\base\BaseBootstrap |
| extractModules() | Extract and load all modules from the Application-Object. | luya\base\BaseBootstrap |
| getModules() | Return all modules prepared by extractModules() method. |
luya\base\BaseBootstrap |
| hasModule() | Check if a Module exists in the module list getModules(). |
luya\base\BaseBootstrap |
| run() | Invokes the bootstraping process. | luya\web\Bootstrap |
Protected Methods
| Method | Description | Defined By |
|---|---|---|
| generateApiRuleDefintions() | Generate the rest rule defintions for {{luya\admin\Module::$apiDefintions}}. | luya\web\Bootstrap |
Method Details
Before bootstrap run process.
See also luya\base\BaseBootstrap::beforeRun().
| public void beforeRun ( $app ) | ||
| $app | luya\web\Application | |
public function beforeRun($app)
{
foreach ($app->tags as $name => $config) {
TagParser::inject($name, $config);
}
foreach ($this->getModules() as $id => $module) {
foreach ($module->urlRules as $key => $rule) {
if (is_string($key)) {
$this->_urlRules[$key] = $rule;
} else {
$this->_urlRules[] = $rule;
}
}
// get all api rules (since 1.0.10)
foreach ($module->apiRules as $endpoint => $rule) {
$this->_apiRules[$endpoint] = $rule;
}
/**
* 'api-admin-user' => 'admin\apis\UserController',
* 'api-cms-navcontainer' => 'admin\apis\NavContainerController'
*/
foreach ($module->apis as $alias => $class) {
$this->_apis[$alias] = ['class' => $class, 'module' => $module];
}
foreach ($module->tags as $name => $config) {
TagParser::inject($name, $config);
}
}
}
Defined in: luya\base\BaseBootstrap::bootstrap()
Boostrap method will be invoken by Yii Application bootrapping proccess containing the Application ($app) Object to get/set data.
| public void bootstrap ( $app ) | ||
| $app | object |
Luya Application |
public function bootstrap($app)
{
// add trace
Yii::beginProfile('LUYA Boostrap process profiling', __METHOD__);
// register luya core translation message source
if (!isset($app->i18n->translations['luya'])) {
$app->i18n->translations['luya'] = [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@luya/messages',
];
}
$this->extractModules($app);
$this->beforeRun($app);
$this->startModules($app);
$this->run($app);
// end trace
Yii::debug('End of the LUYA bootstraping process', __METHOD__);
Yii::endProfile('LUYA Boostrap process profiling');
}
Defined in: luya\base\BaseBootstrap::extractModules()
Extract and load all modules from the Application-Object.
| public void extractModules ( $app ) | ||
| $app | object |
Luya Application |
public function extractModules($app)
{
if ($this->_modules === null) {
foreach ($app->getModules() as $id => $obj) {
// create module object
$moduleObject = Yii::$app->getModule($id);
// see if the module is a luya base module, otherwise ignore
if ($moduleObject instanceof \luya\base\Module) {
$this->_modules[$id] = $moduleObject;
}
}
// when no luya modules are registered an empty array will be returned.
if ($this->_modules === null) {
$this->_modules = [];
}
}
}
Generate the rest rule defintions for {{luya\admin\Module::$apiDefintions}}.
| protected array generateApiRuleDefintions ( array $apis, array $rules ) | ||
| $apis | array |
The array of apis where key is the api name |
| $rules | array |
The new {{luya\base\Module::$apiRules}} defintion |
protected function generateApiRuleDefintions(array $apis, array $rules)
{
// generate the url rules which are collected as ONE with an array of controllers:
$collection = [];
foreach ($apis as $alias => $array) {
if (!isset($rules[$alias])) {
$collection[] = 'admin/'.$alias;
}
}
$result = [];
$result[] = ['controller' => $collection];
// generate the rules from apiRules defintions as they are own entries:
foreach ($rules as $api => $rule) {
$rule['controller'] = 'admin/' . $api;
$result[] = $rule;
}
return $result;
}
Defined in: luya\base\BaseBootstrap::getModules()
Return all modules prepared by extractModules() method.
| public array getModules ( ) | ||
| return | array |
An array containg all modules where the key is the module name and the value is the Module Object |
|---|---|---|
public function getModules()
{
return $this->_modules;
}
Defined in: luya\base\BaseBootstrap::hasModule()
Check if a Module exists in the module list getModules().
| public boolean hasModule ( $module ) | ||
| $module | string |
The name of the Module |
public function hasModule($module)
{
return array_key_exists($module, $this->_modules);
}
Invokes the bootstraping process.
See also luya\base\BaseBootstrap::run().
| public void run ( $app ) | ||
| $app | luya\web\Application | |
public function run($app)
{
if (!$app->request->getIsConsoleRequest()) {
if ($this->hasModule('admin') && $app->request->isAdmin) {
// When admin context, change csrf token, this will not terminate the frontend csrf token:
// @see https://github.com/luyadev/luya/issues/1778
$app->request->csrfParam = '_csrf_admin';
$app->getModule('admin')->controllerMap = $this->_apis;
// calculate api defintions
if ($app->getModule('admin')->hasProperty('apiDefintions')) { // ensure backwards compatibility
$app->getModule('admin')->apiDefintions = $this->generateApiRuleDefintions($this->_apis, $this->_apiRules);
}
// as the admin module needs to listen for $apiDefintions we have to get the urlRules from the admin and merge with the existing rules:
// in admin context, admin url rules have always precedence over frontend rules.
$this->_urlRules = array_merge($app->getModule('admin')->urlRules, $this->_urlRules);
} else {
// Frontend context
$app->themeManager->setup();
if ($app->themeManager->hasActiveTheme) {
$app->layout = $app->themeManager->activeTheme->layout;
}
}
}
$app->getUrlManager()->addRules($this->_urlRules);
}