http://sleepingowladmindemo.cloudcontrolled.com/admin
Per treballar amb camps de dades s'ha d'instal·lar (a Homestead si utilitzeu Homestead):
$ sudo apt-get install php5-intl
Els següents passos no calen però en cas d'error poden ser útils per depurar. Activeu el mòdul:
$ sudo php5enmod intl
I apliqueu els canvis a Apache o Nginx:
$ sudo service apache2 restart $ sudo service php5-fpm restart
SleepingOwl és un Paquet laravel i per tant s'instal·la amb el procediment habitual de qualsevol paquet Laravel. A un projecte Laravel nou o existent executeu:
$ composer require "sleeping-owl/admin:2.*"
Un cop instal·lat el paquet composer des de Packagist ([1]) ara cal instal·lar el Service provider a Laravel (vegeu Laravel Service Providers ) editant el fitxer config/app.php
$ editor config/app.php
I afegiu al vector providers:
'SleepingOwl\Admin\AdminServiceProvider', 'Illuminate\Html\HtmlServiceProvider',
I ara instal·leu les Facades editant al mateix fitxer el vector aliases i afegiu:
'Admin' => 'SleepingOwl\Admin\Admin', 'AdminAuth' => 'SleepingOwl\AdminAuth\Facades\AdminAuth', 'AdminRouter' => 'SleepingOwl\Admin\Facades\AdminRouter', 'AssetManager' => 'SleepingOwl\Admin\AssetManager\AssetManager', 'Column' => 'SleepingOwl\Admin\Columns\Column', 'FormItem' => 'SleepingOwl\Admin\Models\Form\FormItem', 'ModelItem' => 'SleepingOwl\Admin\Models\ModelItem', 'Form' => 'Illuminate\Html\FormFacade', 'Html' => 'Illuminate\Html\HtmlFacade',
Finalment executeu la comanda artisan a Homestead (es requereix tenir l'accés a base de dades configurat):
$ homestead ssh $ php artisan admin:install
Ja podeu obrir la aplicació a la URL relativa /admin:
http://lavostra.app/admin
El usuari per defecte creat mitjançant Seeders és:
Podeu crear més usuaris amb la comanda:
$ php artisan admin:administrators
Vegeu:
http://sleeping-owl.github.io/en/Commands/Administrators.html
Ara us interessarà configurar un nou model sobre el qual farem les operacions crud. Per això se suposa que ja teniu una migració, un seed si s'escau i una classe model per a una taula o més de la vostra base de dades. Anem a fer un exemple, suposeu que teniu la taula:
training_resource
Creada i amb dades i el nostre fitxer de Model Eloquent és:
App\Training_Resource
i es troba al fitxer:
app/Training_Resource.php
Executem:
$ php artisan admin:model "\App\Training_Resource" --title="Recursos de formació" --columns="training_resource_name, training_resource_short_name, training_resource_description, training_resource_thumbnail,training_resource_external_url,training_resource_parentResourceId"
Això crea el fitxer:
app/admin/Training_Resource.php
En el meu cas cal canviar la línia:
Admin::model(App\Training_Resource::class)->title('Recursos de formació')->with()->filters(function ()
Per:
Admin::model('\App\Training_Resource')->title('Recursos de formació')->with()->filters(function ()
Ara editem el menu al fitxer app/admin/menu.php i afegiu la línia:
Admin::menu('\App\Training_Resource');
Finalment per evitar errors al validar els formulari cal que modifiqueu el vostre model per tal que hereti de:
SleepingOwlModel (SleepingOwl\Models\SleepingOwlModel)
en comptes de Model (Illuminate\Database\Eloquent\Model)
El fitxer de model ha de quedar:
<?php namespace App; use SleepingOwl\Models\SleepingOwlModel; class Training_Resource extends SleepingOwlModel ...
Utilitzeu la comanda :
$ php artisan admin:model "\Foo\MyModel" --title="My Model Title" --columns="title, image, date, entries"
Recursos:
https://github.com/sleeping-owl/admin/issues/74
You can get all menu items with this code:
$items = Admin::instance()->menu->getItems();
or in new versions:
$items = Admin::instance()->getMenu();
and render them:
@foreach ($items as $item) {!! $item->render() !!} @endforeach
IMPORTANT: But there will be a problem with admin routes, you cannot get a center part of the admin page and insert it into your layout. If you want to solve it you must publish views from package and update it layout by yourself.
I'm having a problem with re-authenticate. I set the auth using Eloquent, but /admin is asking for re-auth. Is single-auth possible? Yes with:
'beforeFilters' => false
this solved my problem.
And for templates... Publishing views of models/* to vendor/admin/model and replacing
@extends('admin::_layout.inner') @section('innerContent')
for
@extends('app') @section('content')
it will be integrated!
Excellent job, Sleeping Owl! One of the most powerful add-on!
Només cal canviar el Midleware d'autenticació al fitxer config de Sleeeping Owl admin (config/admin.php):
/* * Middleware to use in admin routes */ 'middleware' => ['admin.auth'],
Per exemple pel d'una app per defecte Laravel:
App\Http\Middleware\Authenticate
és a dir:
/* * Middleware to use in admin routes */ 'middleware' => ['App\Http\Middleware\Authenticate'],
A més us caldrà sobrescriure les vistes de capçalera i similars per adaptar-les a que utilitzin el objecte Auth de Laravel per defecte i no pas AdminAuth. He de copiar la carpeta default:
vendor/sleeping-owl/admin-lte-template/src/views/default
a la carpeta:
resources/views/vendor/admin-lte
que no existeix i haureu de crear prèviament.
Resources:
A SleepingOwl\Admin\Providers\FormItemServiceProvider s'utilitza:
<?php namespace SleepingOwl\Admin\Providers; use Illuminate\Support\ServiceProvider; use SleepingOwl\Admin\FormItems\FormItem; class FormItemServiceProvider extends ServiceProvider { public function register() { FormItem::register('columns', 'SleepingOwl\Admin\FormItems\Columns'); FormItem::register('text', 'SleepingOwl\Admin\FormItems\Text'); FormItem::register('time', 'SleepingOwl\Admin\FormItems\Time'); FormItem::register('date', 'SleepingOwl\Admin\FormItems\Date'); FormItem::register('timestamp', 'SleepingOwl\Admin\FormItems\Timestamp'); FormItem::register('textaddon', 'SleepingOwl\Admin\FormItems\TextAddon'); FormItem::register('select', 'SleepingOwl\Admin\FormItems\Select'); FormItem::register('multiselect', 'SleepingOwl\Admin\FormItems\MultiSelect'); FormItem::register('hidden', 'SleepingOwl\Admin\FormItems\Hidden'); FormItem::register('checkbox', 'SleepingOwl\Admin\FormItems\Checkbox'); FormItem::register('ckeditor', 'SleepingOwl\Admin\FormItems\CKEditor'); FormItem::register('custom', 'SleepingOwl\Admin\FormItems\Custom'); FormItem::register('password', 'SleepingOwl\Admin\FormItems\Password'); FormItem::register('textarea', 'SleepingOwl\Admin\FormItems\Textarea'); FormItem::register('view', 'SleepingOwl\Admin\FormItems\View'); FormItem::register('image', 'SleepingOwl\Admin\FormItems\Image'); FormItem::register('images', 'SleepingOwl\Admin\FormItems\Images'); FormItem::register('file', 'SleepingOwl\Admin\FormItems\File'); FormItem::register('radio', 'SleepingOwl\Admin\FormItems\Radio'); } }
Però realment és registra a:
AdminServiceProvider
Vegeu
Es pot fer doncs un Service Provider a mida per a la nostra app
FormItem::register('TranslatableText', 'MyApp\Admin\FormItems\TranslatableText');
on MyApp\Admin\FormItems\TranslatableTex seria fill de
SleepingOwl\Admin\FormItems\Text
i redifinir el mètode view (trobareu a BaseFormItem) o redefinit la vista formitem.translatabletext (canviant el paràmere view al fill)
Venint de custom el mapeig és:
display --> render callback-->save
Vegeu FormItemInterface i Renderable
És un Laravel Package i per tant un paquet Composer que tal com s'observa al seu procés d'instal·lació proveeix d'un Laravel service Provider:
SleepingOwl\Admin\AdminServiceProvider
Al registrar el Service Provider (es a dir al afegir-lo al fitxer config al vector providers) s'executa em mètode register que realment registra altres proveidors de servei com:
$this->app->register('\Intervention\Image\ImageServiceProvider'); $this->app->register('\SleepingOwl\AdminAuth\AdminAuthServiceProvider');
També registre les comandes artisan extra (comanda install], i les comandes admin:model que crea els fitxers de configuració dels Models i administrators per crear usuaris administradors per línia de comandes)
El objecte principal que es lliga (bind) al contenidor de Laravel és l'objecte Admin:
https://github.com/sleeping-owl/admin/blob/master/src/SleepingOwl/Admin/Admin.php
Que com podeu veure el sistema s'assegura que només s'instal·la una sola instància i és la compartida/utilitzada durant tota la estona (singleton) $this->app->bindShared('SleepingOwl\Admin\Admin', function ($app) { return Admin::instance(); }); $this->app->singleton('admin', 'SleepingOwl\Admin\Admin');
I també es registre un objecte route encarregat de les rutes al qual si pot accedir directament o a través de l'objecte Admin:
https://github.com/sleeping-owl/admin/blob/master/src/SleepingOwl/Admin/Router.php
A la pàgina:
http://sleeping-owl.github.io/en/Routes/Default_Routes.html
es poden observar les rutes que registra per defecte Sleeping Owl. Per defecte totes les rutes que comencen pel prefix admin son processades per Sleeping Owl però podeu canviar aquest funcionament al fitxer de configuració config/admin.php. També es poden definir rutes extres segons:
http://sleeping-owl.github.io/en/Routes/Custom_Routes.html
Les rutes es registrem al executar la comanda:
$ php artisan install:admin
Que bàsicament és com fer un publish del paquet però que a més executa les migracions i els seeds i algunes altres tasques (com crear els fitxers bpasics de configuració a la carpeta admin) com podeu veure al codi:
https://github.com/sleeping-owl/admin/blob/master/src/SleepingOwl/Admin/Commands/InstallCommand.php
Un cop registrades les rutes ja tenim doncs tots els controladors definits, si obviem els controladors relatius a la autenticació i els de assets i altres de suport el controlador principal és AdminController:
https://github.com/sleeping-owl/admin/blob/master/src/SleepingOwl/Admin/Controllers/AdminController.php
Que hereta de BaseController on podeu trobar funcionalitats comunes als controladors de Sleeping Owl admin.
Algun error raro hi ha amb el mcrypt. Cal repassar teniu instal·lat php5-mcrypt
$ sudo apt-get install php5-mcrypt
Localitzeu el fitxer init:
$ dpkg -L php5-mcrypt ... /etc/php5/mods-available/mcrypt.ini
Amb el contingut:
$ cat /etc/php5/mods-available/mcrypt.ini ; configuration for php MCrypt module extension=mcrypt.so
Activeu el mòdul:
$ sudo php5enmod mcrypt
I apliqueu el canvis:
$ sudo service php5-fpm restart
Recursos:
Aquest error succeeix si la nostra/nostres classes Model no hereten de:
SleepingOwlModel
Recursos: