IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Demo

http://sleepingowladmindemo.cloudcontrolled.com/admin
  • Usuari: admin
  • Password: SleepingOwl

Requeriments

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

Instal·lació

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:

  • Usuari: admin
  • Password: SleepingOwl

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
...

Creació de fitxers de model

Utilitzeu la comanda :

$ php artisan admin:model "\Foo\MyModel" --title="My Model Title" --columns="title, image, date, entries"

Recursos:

Integrar el menú de sleeping Owl en un menú ja existent

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!

Canviar el sistema de Login

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:

Custom FormItems

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

Com funciona?

É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.

Troubleshooting

Composer install. PHP extension mcrypt is missing from your system

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:

Call to undefined method Illuminate\Database\Query\Builder::validate()

Aquest error succeeix si la nostra/nostres classes Model no hereten de:

SleepingOwlModel

Recursos:

Vegeu també

Enllaços externs