delboy1978uk/bone-doctrine 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

delboy1978uk/bone-doctrine

最新稳定版本:v2.15.3

Composer 安装命令:

composer require delboy1978uk/bone-doctrine

包简介

Doctrine functionality for Bone Framework

README 文档

README

Latest Stable Version Total Downloads License
build status Code Coverage Scrutinizer Code Quality

Doctrine functionality for Bone Framework

installation

Install via composer

composer require delboy1978uk/bone-doctrine

##Usage Simply add the Package to Bone's module config

<?php

// use statements here
use Bone\BoneDoctrine\BoneDoctrinePackage;

return [
    'packages' => [
        // packages here...,
        Bone\BoneDoctrine\BoneDoctrinePackage::class,
    ],
    // ...
];

You should already have a config/bone-db.php configuration file, as it comes by standard in the Bone Framework skeleton project.

<?php

return [
    'db' => [
        'driver' => 'pdo_mysql',
        'host' => 'mariadb',
        'dbname' => 'awesome',
        'user' => 'dbuser',
        'password' => '[123456]',
    ],
];

Also you must set paths for your proxy, cache and entity directories.

<?php

return [
    // other paths here....
    'proxy_dir' => 'data/proxies/',
    'cache_dir' => 'data/cache/',
    'entity_paths' => [],
];

entity manager

You can fetch and inject the Doctrine\ORM\EntityManager into your classes inside the package registration class:

$entityManager = $c->get(EntityManager::class);

Of course from there you can check the doctrine docs here https://www.doctrine-project.org/

database migrations

Bone Framework comes with the vendor/bin/bone command, which is essentially just Doctrine Migrations configured for Bone Framework. Not only will it scan your own entity folder for changes, but also those of any vendor packages you rely on.

Change your DB schema by updating the Doctrine annotations on your entity class, then run:

vendor/bin/bone migrant:diff
vendor/bin/bone migrant:migrate

https://github.com/delboy1978uk/user is a typical example, look in the entity folder to learn more. See Doctrine Fixtures documentation for more details.

fixtures

You can run data fixtures using the following command

vendor/bin/bone migrant:fixtures

In your Bone Framework config, add a fixtures.php and return classes that run your fixtures.

<?php
/**
 * Returns a list of fixtures by classname, in the order of their execution
 */

use Fixtures\LoadUsers;

return [
    'fixtures' => [
        LoadUsers::class,
    ],
];

See Doctrine Fixtures documentation for more details.

admin panel

You can create a quick CRUD admin panel for your entities. Example:

use Bone\BoneDoctrine\Attributes\Cast;
use Bone\BoneDoctrine\Attributes\Visibility;
use Bone\BoneDoctrine\Traits\HasId;
use Del\Form\Field\Attributes\Field;
use Del\Form\Traits\HasFormFields;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\HasLifecycleCallbacks]
class SomeEntity
{
    use HasFormFields;
    use HasId;

    #[ORM\Column(type: 'float')]
    #[Field('float|required|max:6')]    // form field validator rules
    #[Visibility('all')                 // visible on index,create,edit,delete
    #[Cast(prefix: '')]                // prefix or suffix  table values
    private ?float $price = null;

    // etc
}

Now that the entity is annotated, create a service, and an admin controller as follows:

<?php

declare(strict_types=1);

namespace Bone\App\Service;

use Bone\App\Entity\Test;
use Bone\BoneDoctrine\Service\RestService;

class SomeEntityService extends RestService
{
    public function getEntityClass(): string
    {
        return SomeEntity::class;
    }
}

The Admin controller looks like this:

<?php

declare(strict_types=1);

namespace Bone\App\Http\Controller;

use Bone\App\Entity\SomeEntity;
use Bone\App\Service\SomeEntityService;
use Bone\BoneDoctrine\Http\Controller\AdminController;

class TestAdminController extends AdminController
{
    public function getEntityClass(): string
    {
        return SomeEntity::class;
    }

    public function getServiceClass(): string
    {
        return SomeEntityService::class;
    }
}

Finally add the routes in your package class:

public function addRoutes(Container $c, Router $router): Router
{
    // other routes here....
    $router->adminResource('some-entities', TestAdminController::class, $c);
}

You can now browse to /admin/some-entities and perform CRUD actions.

api controller

You can do the same to get an instant API. Here's an example for a Perdson class. Controller:

<?php

declare(strict_types=1);

namespace Bone\App\Http\Controller\Api;

use Bone\App\Service\PersonService;
use Bone\Http\Controller\ApiController;

class PersonController extends ApiController
{
    public function getServiceClass(): string
    {
        return PersonService::class;
    }
}

Service:

<?php

declare(strict_types=1);

namespace Bone\App\Service;

use Bone\App\Entity\Person;
use Bone\BoneDoctrine\Service\RestService;

class PersonService extends RestService
{
    public function getEntityClass(): string
    {
        return Person::class;
    }
}

Route:

public function addRoutes(Container $c, Router $router): Router
{
    $router->apiResource('people', PersonController::class, $c);

    return $router;
}

You now have API REST endpoints at /api/people.

You can see all configured routes using the bone router:list command.

统计信息

  • 总下载量: 2.16k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 14
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-09-12

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固