1. Go to this page and download the library: Download okipa/laravel-brickables library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
okipa / laravel-brickables example snippets
$page = Page::find(1);
// Associate one content brick
$page->addBrick(OneTextColumn::class, ['text' => 'Text']);
// Or associate several content bricks at once
$page->addBricks([
[OneTextColumn::class, ['text' => 'Text']],
[TwoTextColumns::class, ['text_left' => 'Left text', 'text_right' => 'Right text']]
]);
use Illuminate\Database\Eloquent\Model;
use Okipa\LaravelBrickables\Contracts\HasBrickables;
use Okipa\LaravelBrickables\Traits\HasBrickablesTrait;
class Page extends Model implements HasBrickables
{
use HasBrickablesTrait;
// ...
}
Brickables::routes();
Brickables::routes(function(){
// Inside the routes group: will benefit from the CRUDBrickable middleware.
});
// Outside the route group: will not benefit from the CRUDBrickable middleware.
use Illuminate\Database\Eloquent\Model;
use Okipa\LaravelBrickables\Contracts\HasBrickables;
use Okipa\LaravelBrickables\Traits\HasBrickablesTrait;
class Page extends Model implements HasBrickables
{
use HasBrickablesTrait;
public array $brickables = [
'can_only_handle' => [OneTextColumn::class], // By default all registered brickables can be handled.
'number_of_bricks' => [OneTextColumn::class => ['min' => 1, 'max' => 3]], // By default, there are no number restrictions.
];
// ...
}
// As data are stored in json, you will have to process this way: https://github.com/laravel/framework/pull/15464#issuecomment-247642772.
$brick->data = ['text' => 'Another text'];
$brick->save();
namespace App\Vendor\LaravelBrickables\Brickables;
use Okipa\LaravelBrickables\Abstracts\Brickable;
class MyNewBrickable extends Brickable
{
// ...
protected function setCssResourcePath(): string|null
{
return mix('/css/brickables/my-new-brickable.css');
}
protected function setJsResourcePath(): string|null
{
return mix('/js/brickables/my-new-brickable.js');
}
}
namespace App;
use Okipa\LaravelBrickables\Models\Brick;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
class MyNewBrickableBrick extends Brick implements HasMedia
{
// Image management example with the spatie/laravel-medialibrary package.
use InteractsWithMedia;
// Optimize query by eager loading media relations.
protected $with = ['media'];
// ...
}
namespace App\Http\Controllers;
use Okipa\LaravelBrickables\Controllers\BricksController;
class MyNewBrickableBricksController extends BricksController
{
// ...
protected function stored(Request $request, Brick $brick): void
{
// Image management example with the spatie/laravel-medialibrary package
$brick->addMediaFromRequest('image')->toMediaCollection('bricks');
}
protected function updated(Request $request, Brick $brick): void
{
// Image management example with the spatie/laravel-medialibrary package
if ($request->file('image')) {
$brick->addMediaFromRequest('image')->toMediaCollection('bricks');
}
}
// ...
}
class MyNewBrickable extends Brickable
{
public function validateStoreInputs(): array
{
return request()->validate([
'text' => ['function validateUpdateInputs(): array
{
return request()->validate([
'text' => ['
namespace App\Vendor\LaravelBrickables\Brickables;
use App\MyNewBrickableBrick;
use App\Http\Controllers\MyNewBrickableBricksController;
use Okipa\LaravelBrickables\Abstracts\Brickable;
class MyNewBrickable extends Brickable
{
// ...
protected function setBrickModelClass(): string
{
return MyNewBrickableBrick::class;
}
protected function setBricksControllerClass(): string
{
return MyNewBrickableBricksController::class;
}
// ...
}
// You can pass a custom request in the parameters. If none is given, the current request is used.
$model = Brickables::getModelFromRequest();