EduSoho开发指南
研究背景:该Edusoho基于symfony2.8开发,但根据symfony2.8的文档描述和实际Edusoho项目结构对比,二者有较大的差别,同时Edusoho的开发文档并不全面,有许多坑。通过Symfony提供的文档,无法在Edusoho中通过命令行创建数据表和数据表对应的Dao和Service。我想应该是Edusoho团队已经将其进行了大量的修改,导致原本的Symfony文档无法为Edusoho服务。
所以我这里开始对该项目进行数据库新建表实行梳理。
- 在srcBiz目录下,随便找一个文件夹,这里以Activity文件夹为例。
- 在ActivityBizDao下创建XXXActivityDao.php接口文件,这是接口文件,继承基类GeneralDaoInterface;例如TestActivityDao.php
<?php
# 接口:一种成员属性全部为抽象或常量的特殊抽象类。
namespace Biz\Activity\Dao; #命名空间
use Codeages\Biz\Framework\Dao\GeneralDaoInterface; #基类
interface TestActivityDao extends GeneralDaoInterface
{
public function getById($id); #自定义一个函数
}- 在ActivityBizDaoImpl目录下创建XXXActivityDaoImpl.php文件,继承GereralDaoImpl基类,调用上面创建的接口TestActivityDao.php;
<?php
# 这里的内容参考:https://blog.csdn.net/jyl_sh/article/details/106616322
namespace Biz\Activity\Dao\Impl; # 命名空间
use Biz\Activity\Dao\TestActivityDao; # 刚刚创建的接口文件
use Codeages\Biz\Framework\Dao\GeneralDaoImpl; # 基类
class TestActivityDaoImpl extends GeneralDaoImpl implements TestActivityDao
{
protected $table = 'test'; # 要操作的表名
public function declares() # 这是必须的函数
{
// TODO: Implement declares() method.
return array(
'timestamps' => array('created_time', 'update_time'),
'serializes' => array(),
'orderbys' => array(),
'conditions' => array(
'type = :type',
),
);
}
public function getById($id) # 这是接口中有的函数,必须在这里也调用,并实现增删改查的逻辑
{
return $this->get($id);
}
}- 完成上面的Dao创建,下面需要创建Service。找到ActivityBizService,创建XXXXActivityService.php接口文件,不用继承任何基类;例如:TestActivityService.php
<?php
namespace Biz\Activity\Service;
interface TestActivityService
{
public function getActivity($id);
public function findActivitiesByIds($ids);
public function findActivitiesByMediaIds($mediaIds);
public function createActivity($fields);
public function updateActivity($id, $fields);
public function deleteActivity($id);
}- 找到ActivityBizServiceImpl目录,创建XXXXActivityServiceImpl.php文件,继承基类BaseService,调用刚刚创建的接口文件TestActivityService。其中接口文件中有的函数必须在此文件中创建相同的函数
<?php
namespace Biz\Activity\Service\Impl; # 命名空间
use Biz\BaseService; # 服务基类
use Biz\Activity\Dao\TestActivityDao; #之前创建的Dao
use Biz\Activity\Service\TestActivityService; # 上一步创建的服务接口文件
class TestActivityServiceImpl extends BaseService implements TestActivityService
{
public function getActivity($id)
{
// TODO: Implement getActivity() method.
return $this->getTestActivityDao()->getById($id);
}
public function findActivitiesByIds($ids)
{
// TODO: Implement findActivitiesByIds() method.
}
public function findActivitiesByMediaIds($mediaIds)
{
// TODO: Implement findActivitiesByMediaIds() method.
}
public function createActivity($fields)
{
// TODO: Implement createActivity() method.
}
public function updateActivity($id, $fields)
{
// TODO: Implement updateActivity() method.
}
public function deleteActivity($id)
{
// TODO: Implement deleteActivity() method.
}
/**
* @return TestActivityDao
*/
protected function getTestActivityDao()
{
# 使用createDao来使用之前创建的Dao
return $this->createDao('Activity:TestActivityDao');
}
}- 可以看到上一个文件底部创建了一个接口文件中不存在的函数
getTestActivityDao(),这个函数用于调用之前已经创建号的Dao,其中$this->createDao('Activity:TestActivityDao')中的Activity是Dao所在的文件夹,TestActivityDao必须是已经创建好的Impl文件,即为TestActivityDaoImpl.php。在函数getActivity中通过已经创建好的getTestActivityDao()函数来调用Dao中的getById函数,其中已经实现了增删改查的逻辑。 - 如何调用服务来实现具体的业务呢?这里我们先在控制器获取服务,在控制器中创建如下函数。该函数的功能用于调用已经创建好的服务,服务再调用Dao,Dao再执行具体的业务逻辑。
# 获取具体的服务
function getTestServer()
{
return $this->getBiz()->service('Activity:TestActivityService');
}- 服务获取到后,通过如下方法调用到具体的Dao中的函数。其中
getTestServer是上一步创建好的获取服务的函数,getActivity()是在服务的Impl中定义的函数,此函数中又调用了Dao中的getById函数,以达到查询的目的。
$arr = $this->getTestServer()->getActivity(1);
var_dump($arr);
3 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙
文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。