emrahates yazdıMerhaba, CodeIgniter2Laravel modundayım. Laravel 5 ile şansımı denedim fakat yeterince döküman bulamadığım için 4.2 ile başlamaya karar verdim. Sizlere bir sorum olacak, ayarlar tablom var kayıtlar key - value şeklinde tutuluyor. CodeIgniter'da hooks - pre_controller olayında ayarları set ederek istediğim yerden $this->config->item("key"); şeklinde erişim sağlayabiliyordum. Şimdide Config::get("key"); şeklinde bu ayarlara erişebilmek istiyorum fakat bu ayarları nerede set etmem gerekiyor emin değilim.
Bence en basit yolu bir öncelikle bir arayüz oluşturma:
Örnek:
<?php namespace Muratsplat\Blog\Repository\Common;
/**
* App Config Interface
*
* @author Murat Ödünç <murat.asya@gmail.com>
* @copyright (c) 2015, Murat Ödünç
* @license http://www.gnu.org/licenses/gpl-3.0.html GPLv3
* @package Common
*/
interface AppConfigInterface {
/**
* to set key
*
* @param string $name
* @param string $value
* @return bool
*/
public function setConfig($name, $value=null);
/**
* to get value by key
*
* @param string $name key
*/
public function getConfig($name);
/**
* To get default language
*
* @return \Muratsplat\Blog\Models\Language
*/
public function getDefaultLang();
/***
* To get enabled languages
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getEnabledLangs();
}
Projene özel başka arayüzlerde eklenebilir.
Sonrasında bu arayüzü kullanacak Repository yazabilirsin.
Örnek:
<?php namespace Muratsplat\Blog\Repository\Common;
use Muratsplat\Blog\Models\Language;
use Muratsplat\Blog\Models\Config;
use Muratsplat\Blog\Repository\Common\AppConfigInterface;
/**
* Description of UserRepsitory
*
* @author Murat Ödünç <murat.asya@gmail.com>
*/
class AppRepository implements AppConfigInterface {
/**
* Language Model
*
* All languages is managed by the model.
* In general used model make be easy to standart
* CRUD jobs
*
* @var \Muratsplat\Blog\Models\Language
*/
private $lang;
/**
* Simple Model for saving key and value
*
* @var \Muratsplat\Blog\Models\Config
*/
private $config;
/**
* Constructer
*/
public function __construct() {
$this->lang = new Language();
$this->config = new Config();
}
/**
* to set key
*
* @param string $name
* @param string $value
* @return bool
*/
public function setConfig($name, $value=null) {
$config = $this->getConfigModel($name);
if(is_null($config)) {
return $this->config->create(['name' => $name, 'value' => $value])->save();
}
$config->value = $value;
return $config->save();
}
/**
* To get config model by name
*
* @param sitring $name key name
* @return \Muratsplat\Blog\Models\Config
*/
private function getConfigModel($name) {
return $this->config->all()->filter(function($item) use ($name) {
return $item->name === (string) $name;
})->first();
}
/**
* to get value by key
*
* @param string $name key
*/
public function getConfig($name) {
$config = $this->getConfigModel($name);
return is_null($config) ? null : $config->value;
}
/**
* To get default language
*
* @return \Muratsplat\Blog\Models\Language|null
*/
public function getDefaultLang() {
return $this->lang->all()->filter(function($item){
return $item->isDefault();
})->first();
}
/***
* To get enabled languages
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getEnabledLangs() {
return $this->lang->newQuery()->enable()->get();
}
}
Buna benzer Repository ile tüm ayarlarını modeller üzerinden genişletebilirsin.
Eğer caching istersen, modellere getter ile erişirken cache edilen modellerden veri çekebilirsin.