1. Go to this page and download the library: Download bakle/crud-core 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/ */
bakle / crud-core example snippets
class UserUrlPresenter extends BaseUrlPresenter
{
function getRouteName(): string
{
return 'users';
}
}
// --- Examples ---
// Url presenter for routes that doesn't depend on a specific model (index, create)
$userUrlPresenter = new UserUrlPresenter();
$userUrlPresenter->index(); // --> /users
$userUrlPresenter->create(); // --> /users/create
$userUrlPresenter->store(); // --> /users (for post method)
// Url presenter for routes that depend on a specific model (show, edit, update, delete )
$user = User::first();
$userUrlPresenter = new UserUrlPresenter($user);
$userUrlPresenter->index(); // --> /users
$userUrlPresenter->show(); // --> /users/1
$userUrlPresenter->create(); // --> /users/create
$userUrlPresenter->store(); // --> /users (for post method)
$userUrlPresenter->edit(); // --> /users/1/edit
$userUrlPresenter->update(); // --> /users/1
$userUrlPresenter->destroy(); // --> /users/1
class UserPostCommentUrlPresenter extends BaseUrlPresenter
{
function getRouteName(): string
{
return 'users.posts.comments';
}
}
class Post extends \Illuminate\Database\Eloquent\Model
{
public function getRouteKeyName(): string
{
return 'slug';
}
}
// Example
$user = User::first();
$post = Post::first();
$comment = Comment::first();
$urlPresenter = new UserPostCommentUrlPresenter($user, $post, $comment);
$userUrlPresenter->index(); // --> /users/1/posts/the-post-slug/comments
$userUrlPresenter->show(); // --> /users/1/posts/the-post-slug/comments/1
$userUrlPresenter->create(); // --> /users/1/posts/the-post-slug/comments/create
$userUrlPresenter->store(); // --> /users/1/posts/the-post-slug/comments (for post method)
$userUrlPresenter->edit(); // --> /users/1/posts/the-post-slug/comments/1/edit
$userUrlPresenter->update(); // --> /users/1/posts/the-post-slug/comments/1
$userUrlPresenter->destroy(); // --> /users/1/posts/the-post-slug/comments/1
class UserEntity extends BaseEntity
{
public function url(): ?BaseUrlPresenter
{
return new UserUrlPresenter($this->model);
}
... // more methods
}
// Example single model
$user = User::first();
$userEntity = new UserEntity($user);
$user->entity->getCreatedAtDayDateFormat(); // Sat, Oct 7, 2023
// Example multiple model
$users = User::all();
$userEntities = UserEntity::collection($users);
$userEntities->first()->url()->show() // /users/1
class UserIndexViewModel extends BaseIndexViewModel
{
public function getTitle(): string
{
return trans('Users');
}
public function getEntityClass(): string
{
return UserEntity::class;
}
}
// In the UserController
class UserController extends Controller
{
public function index(Request $request): View
{
$users = User::query()->with('roles');
return view('users.index',
(new UserIndexViewModel($users, $request))->build()
);
}
}
class UserShowViewModel extends BaseShowViewModel
{
public function getTitle(): string
{
return trans('User');
}
public function getEntityClass(): string
{
return UserEntity::class;
}
protected function getExtraData(): array
{
return [
'title' => $this->getTitle()
];
}
}
// In your UserController
class UserController extends Controller
{
public function show(User $user)
{
$user->load('roles');
return view('users.show', (new UserShowViewModel($user))->build());
}
}
class UserFormViewModel extends BaseFormViewModel
{
protected function getEntityClass(): string
{
return UserEntity::class;
}
protected function getExtraData(): array
{
return [
'roles' => Role::query()->get();
];
}
}
// In your UserController
class UserController extends Controller
{
public function create(): View
{
return view('users.form',
(new UserFormViewModel(new User()))->setFormType(FormTypes::CREATE)->build()
);
}
public function edit(User $user): View
{
return view('users.form',
(new UserFormViewModel($user))->setFormType(FormTypes::EDIT)->build()
);
}
}