苗条3和嫩枝 - 从数据库查询
问题描述:
今天在这里我有一个问题全局变量:苗条3和嫩枝 - 从数据库查询
我与苗条3框架和嫩枝模板引擎的工作,我要建一个小型的CMS,允许用户(除其他外)编辑导航菜单。现在,菜单元素基本上都是我存储在名为“categories”的MySQL表中的所有类别,问题是我不知道如何辨别苗条(因为我正在使用它)执行一个查询传递给树枝容器,因为我已经知道,如果我想在所有视图中提供菜单数组,我必须在全局注入它,我只是不知道其中要声明该函数。我见过类似的问题,唯一的答案是如何注入变量,而不是写入函数的位置。我应该只是把它写在dependencies.php里面,并且加上:
use App\Model\Category;
还是有另一种方式?我想编写一个函数,所有的类并将其存储在一个变量,我可以传递给容器全球
routes.php文件
$app->get('/', 'HomeController:index')->setName('homepage');
$app->get('brands', 'MainController:index')->setName('all_brands');
$app->get('/{category}', 'MainController:single_category');
$app->get('/{category}/{brand}', 'MainController:single_showbrand');
dependencies.php
<?php
// DIC configuration
$container = $app->getContainer();
// view renderer
$container['renderer'] = function ($c) {
$settings = $c->get('settings')['renderer'];
return new Slim\Views\PhpRenderer($settings['template_path']);
};
// monolog
$container['logger'] = function ($c) {
$settings = $c->get('settings')['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level']));
return $logger;
};
// Twig
$container['view'] = function ($c) {
$view = new \Slim\Views\Twig('templates');
// Instantiate and add Slim specific extension
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));
$view->getEnvironment()->addGlobal('currentUrl',$c->get('request')->getUri());
return $view;
};
// Controllers
// -- HomeController.php
$container['HomeController'] = function ($container) {
return new \App\Controllers\HomeController($container);
};
// -- MainController.php
$container['MainController'] = function ($container) {
return new \App\Controllers\MainController($container);
};
// Eloquent Database Injection
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($container['settings']['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();
$container['db'] = function ($container) use ($capsule) {
return $capsule;
};
// Validator
$container['validator'] = function ($container) {
return new App\Validation\Validator;
};
文件夹结构
- application
- Controllers
- HomeController.php
- MainController.php
- Models
- User.php
- Category.php
- Brand.php
- Validation
- assets
- css
- js
- ...
- logs
- node_modules
- ...
- ...
- public
- index.php
- src
- dependencies.php
- middleware.php
- routes.php
- settings.php
- templates
答
让我们假设你有一个名为getNestedCategories
方法在App\Model\Category
这是负责从数据库检索类别。我会叫它设置树枝一个全局变量,如果要设置其他的全局变量currentUrl
,这意味着在dependencies.php,是这样的:
// Twig
$container['view'] = function ($c) {
$view = new \Slim\Views\Twig('templates');
// Instantiate and add Slim specific extension
$basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
$view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));
$view->getEnvironment()->addGlobal('currentUrl',$c->get('request')->getUri());
// Add categories
$view->getEnfironment()->addGlobal('categories',(new \App\Model\Category)->getNestedCategories());
return $view;
};
显示文件夹树,然后选择路线请。 –
@MattiaDinosaur后编辑 – K3nzie
如果你想伤害数组变量全球范围内,你可以伤害它。 –