2017-05-24 3 views
2

から、ここで私は別の質問で、今日午前:私はスリム3フレームワークと小枝のテンプレートエンジンで働いているスリム3と小枝 - グローバル変数DBクエリ

、私はミニCMS可能に構築していますユーザーはナビゲーションメニューを編集することができます。さて、メニュー要素は、基本的に、私が "カテゴリ"と呼ばれる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 
+0

フォルダツリーとあなたのルートをしてください示しています。あなたはdependencies.php手段他のグローバル変数currentUrlを、設定されている場合、私はこのようなものは、小枝のためにグローバル変数を設定するには、それを呼び出します。 –

+0

@MattiaDinosaurポスト編集 – K3nzie

+0

配列変数をグローバルに負傷させたい場合は、けがをする可能性があります。 –

答えて

0

getNestedCategoriesという名前のメソッドがあるとします。 App\Model\Categoryにあり、データベースからカテゴリを取得します。

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