2017-05-24 5 views
2

hier bin ich heute mit einer anderen Frage:Schlanke 3 und Zweig - globale Variable von einer DB-Abfrage

ich mit Slim 3 Rahmen und Twig Template-Engine gerade arbeite, ich baue ein Mini-CMS, das ermöglicht es dem Benutzer (unter anderem), um das Navigationsmenü zu bearbeiten. Nun, die Menüelemente sind im Grunde alle Kategorien, die ich in einer MySQL-Tabelle namens "categories" gespeichert habe, das Problem ist, dass ich nicht weiß, wie man schlank (und eloquent, da ich es verwende) weiß eine Abfrage ausführen, um an den Zweig-Container zu übergeben, weil ich bereits weiß, dass, wenn ich das Menü-Array in allen Ansichten verfügbar haben möchte ich es global injizieren, weiß ich einfach nicht wo, um die Funktion zu deklarieren. Ich habe ähnliche Fragen gesehen, bei denen die einzige Antwort darin besteht, wie die Variable injiziert wird und nicht, wo die Funktion geschrieben werden soll. Sollte ich schreibe es gerade innerhalb dependencies.php und fügen:

use App\Model\Category; 

oder gibt es einen anderen Weg? Ich möchte eine Funktion schreiben, die die Kategorien und speichert alle sie in einer Variablen nimmt, die ich weltweit in den Behälter

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; 

}; 

Ordnerstruktur passieren kann

- 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 
+0

zeigen die Ordnerstruktur und Ihre Route bitte. –

+0

@ MattiaDinosaur posten bearbeitet – K3nzie

+0

Wenn Sie Verletzungen der Array-Variable global wollen, können Sie es verletzen. –

Antwort

0

Nehmen wir an, Sie haben eine Methode namens getNestedCategories in App\Model\Category, die für das Abrufen von Kategorien aus der Datenbank zuständig ist. Ich würde es nennen eine globale Variable für Zweig zu setzen, wo Sie die andere globale Variable setzen currentUrl, die in dependencies.php bedeutet, etwas wie folgt aus:

// 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; 
};