geniusts / preferences
Very easy way to generate a preferences page for applications that have multiple components and packages.
Installs: 4 877
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 3
Forks: 0
Open Issues: 0
Requires
- php: >=7.0
- doctrine/dbal: ^2.5|3.*
- illuminate/database: >=5.2
- illuminate/routing: >=5.2
- illuminate/view: >=5.2
README
This package to generate a preferences page to the application, specially if you have many component that have a different settings and you want to store it in the database and use it by default config functions of laravel.
Installation
- Download the package
- command line:
composer require geniusts/preferences
- or add it to composer file:
{ "require": { "geniusts/preferences": "^2.0" } }
and run:
composer update
- Service Provider
- If you are using Laravel >=5.5 and the
auto-discover
is enabled, no need to do anything. - If your Laravel <5.5 or you disabled
auto-discover
add the ServiceProvider to the providers array inconfig/app.php
GeniusTS\Preferences\PreferencesServiceProvider::class,
Note: If you are using Laravel 5.5 or greater no need to add it, It will auto discove
- Controller And Migrations
Publish the package Controller file to your application. Run these commands:
php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=controller
You can also publish views and migrations by the following commands:
php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=views
php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=migrations
No need to publish the migrations files just run migrate command to execute the migrations.
php artisan migrate
If you want to use
DB
transaction while saving the data, addprotected $transactions = true;
toSettingsController
.
- Routes and views
Add two routes to you routes file:
Route::get('/settings/{preferences_domain?}', 'SettingsController@edit')
->midllware(//Apply your middleware)
Route::patch('/settings/{preferences_domain?}/{preferences_element?}', 'SettingsController@update')
->midllware(//Apply your middleware)
Now you have to create a preferences.settings
view with your app layout
and include the geniusts_preferences::settings
view.
@include('geniusts_preferences::settings');
Usage
Creating settings tab
- create a view of the settings:
Ex.:
settings/general.blade.php
<div class="row"> <div class="col-xs-12"> <div class="form-group"> <label> Test </label> <div class="input-group"> <div class="input-group-addon"> <i class="glyphicon glyphicon-alert"></i> </div> <input class="form-control" name="general[project_name]" value="{{ old('general.project_name', config('preferences.general.project_name')) }}"> </div> </div> </div> </div>
- Register the tab to PreferencesManager
use GeniusTS\Preferences\Models\Domain; use GeniusTS\Preferences\Models\Element; // Create a settings Domain // Domain(string $key, View $view, string $label) // you can use label like 'labels.general', because the view execute "trans" function $domain = new Domain('general', view('settings.general'), 'General'); // Add the inputs names and validation rules // Element(string $name, mixed $rules) $domain->addElement(new Element('project_name', 'required|max:255')); // OR for array values $domain->addElement(new Element('options', ['options' => 'array', 'options.*' => 'required|integer'])); // register the Domain to the Preferences manager $manager = resolve('preferences'); // or app('preferences') for versions older than 5.3 $manager->addDomain($domain);
You can register the
domains
in theboot
function of your package service provider.
Access saved settings
Use the default config
function or Config
class to get the values of
your settings: config('preferences.{domain}.{element}')
config('preferences.general.project_name');
Migration from version 1
-
update inputs name inside preferences views. Ex: You have a
general
domain that haveproject_name
element, then the input name should begeneral[project_name]
. -
Update declaration of
edit
andhandleSuccessResponse
methods ofSettingsController
inside your project.
public function edit($domain = null) { // Logic here } protected function handleSuccessResponse($domain, $element) { // Logic here }
License
This package is free software distributed under the terms of the MIT license.