浅谈MVC之composer加载第三方类库

好了,前面我们进行了对MVC框架的一系列封装。可以说我们的框架还是一个特别简陋的框架,与其他成熟的框架比起来我们现在的的框架最缺少的还是对类库扩展的支持,今天我们就通过composer来加载第三方类库。
什么是composer?
Composer是PHP中用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的库文件。
composer的安装
windowds安装:
http://jingyan.baidu.com/article/4f34706ed04013e386b56d72.html
需要先创建一个文件,在文件中写入相关的配置信息。
如图:
这里写图片描述
在根目录下新建一个composer.json的文件

{
   "name":"MVC PHP",
   "description":"PHP Framework",
   "type":"Framework",
   "keywords":[
      "PHP","PHP Framework "
    ],
   "require":{
        "php":">=5.3.0",
        "filp/whoops":"*",
        "symfony/var-dumper":"*",
        "catfan/medoo":"*",
    "twig/twig":"*"
    },
  "repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}
}

在使用composer之前需要先在根目录下创建一个vendor的文件夹
并在
这里写图片描述
接值使用Git Bash Here在composer.json文件所在目录下键入

composer install
composer update

安装成功后就可以使用了,具体使用方法可以查找相关的使用手册我在这里就不多说了!
medoo
medoo相当于我们的PDO扩展,他是一个数据库的操作类库
database.php文件中的书写。

<?php 
   return array(
        // 'DSN'=>'mysql:host=localhost;dbname=test',
        // 'USERNAME'=>'root',
        // 'PASSWD'=>'root'
    'database_type' => 'mysql',
    'database_name' => 'test',
    'server' => 'localhost',
    'username' => 'root',
    'password' => 'root',
    'charset' => 'utf8'
    );
?>

./core/lib/model.php文件中的书写

<?php 
  namespace core\lib;
  use core\lib\conf;
   //class model extends \PDO  pdo方式
   class model extends \medoo  //插件MEDOO方式
   {
      public function __construct()
      {

         $option = conf::all('database');

        /*try
        {
            parent::__construct($database['DSN'], $database['USERNAME'], $database['PASSWD']);
        }catch(\PDOException $e)
        {
            p($e->getMessage());
        }*/
        parent::__construct($option);
      }
   }
?>
<think>好的,我现在要解决用户在ThinkCMF 5中引入第三方类库的问题。首先,我需要仔细阅读用户提供的引用内容,特别是引用3、4、5,因为这些可能直接相关。 用户提供的引用3提到ThinkPHP5中第三方类库可以放在extend目录下,并且使用命名空间。引用4则指出在ThinkCMF中,第三方类库应该放在simplewind/Core/Library/Vendor/下,比如Zend的例子。但ThinkCMF是基于ThinkPHP的,所以可能两种方式都适用?需要确认ThinkCMF5的结构是否与ThinkPHP5一致。 用户的问题是关于ThinkCMF5的,所以引用4可能更相关,但引用4中的路径是simplewind/Core/Library/Vendor/,这可能是旧版本的结构?比如ThinkCMF5是否仍然使用这样的目录?或者是否改用了类似TP5的extend目录? 另外,用户提供的引用5展示了在Util命名空间下的类,如何引入。引用3中提到了三种方法:直接实例化、use命名空间、或者使用Loader::import。但在TP5中,Loader类可能已经被替换,或者方法不同? 现在需要综合这些信息,给出ThinkCMF5的正确方法。可能的步骤包括: 1. 确定第三方类库的位置:根据引用4,可能在Vendor目录下,但根据引用3,TP5推荐extend目录。需要确认ThinkCMF5是否沿用了TP5的结构,或者有自己的规范。例如,ThinkCMF可能推荐将第三方类库放在Vendor目录下,如引用4中的路径,或者应用根目录的extend目录? 2. 类库的命名空间和文件路径是否遵循PSR-4标准。例如,如果类库有命名空间,需要目录结构对应。 3. 如何引入这些类库:自动加载、使用import方法,或者直接实例化。 可能存在的混淆点:ThinkCMF是基于TP5开发的,所以应该遵循TP5的类库引入方法。而引用3中的TP5方法指出第三方类库应放在extend目录,并正确使用命名空间。但引用4中的ThinkCMF例子却放在Vendor下,所以可能存在两种方式? 需要进一步确认:在ThinkCMF5中,是否更推荐将第三方类库放在extend目录,或者Vendor目录下? 假设用户使用的是最新的ThinkCMF5,可能基于TP5,因此参考引用3的TP5方法。所以正确方法应该是将第三方类库放在应用根目录的extend目录下,并正确设置命名空间。例如,如果类库的命名空间是first\second,则文件路径为extend/first/second/Foo.php,然后使用use语句或直接实例化。 但引用4提到的路径可能针对的是核心类库中的Vendor目录,比如引入如Zend等库时。而用户自己的第三方类库应该放在extend目录下? 需要区分两种情况:引入Composer管理的类库和手动引入的第三方类库。用户的问题应该是手动引入的情况,所以应指导他们将类库放在extend目录,并正确使用命名空间,然后通过自动加载或Loader类来引入。 此外,用户提供的引用5中,类位于Util命名空间,文件路径可能对应extend/Util/Work.php,然后通过new \Util\Work()来实例化。 所以,综合以上,步骤应该是: 1. 将第三方类库文件放置在extend目录下的相应子目录,根据命名空间结构。 2. 在代码中使用命名空间引入类,或者直接实例化。 此外,可能需要检查ThinkCMF5的文档,确认是否有特殊要求,但用户提供的引用中,引用4提到的是ThinkCMF的Vendor路径,但可能该路径是针对核心Vendor库,而用户自己的第三方库应放在应用extend目录。 因此,回答应结合TP5的方法,建议将第三方类库放在extend目录,正确命名空间,并使用use或直接实例化。</think>在ThinkCMF 5中引入第三方类库的方法主要遵循ThinkPHP 5的规范,以下是具体步骤: ### 一、类库存放位置 1. **extend目录**(推荐): 将第三方类库文件放置在应用根目录的`extend`目录下,目录结构需与命名空间对应。例如类`first\second\Foo`应存放于: ``` extend/first/second/Foo.php ``` 这是ThinkPHP 5官方推荐的扩展类库目录[^3]。 2. **Vendor目录**(可选): 若类库属于公共组件(如Zend等),可放在`simplewind/Core/Library/Vendor/`下,例如: ``` simplewind/Core/Library/Vendor/Zend/Server.php ``` 引用时需使用完整命名空间[^4]。 --- ### 二、命名规范 - 类需遵循**PSR-4**规范,命名空间与目录层级严格匹配。 - 避免与系统命名空间(如`think`、`app`)冲突[^3]。 --- ### 三、引入方法 #### 方法1:直接实例化 ```php $foo = new \first\second\Foo(); ``` #### 方法2:通过`use`引入命名空间 ```php use first\second\Foo; $foo = new Foo(); ``` #### 方法3:无命名空间类库(需手动导入) ```php use think\Loader; Loader::import('first.second.Foo'); $foo = new \Foo(); ``` --- ### 四、示例 假设需引入一个工具类`Util\Work`,文件路径为`extend/Util/Work.php`: ```php namespace Util; class Work { public function run() { return "Working"; } } ``` 在控制器中调用: ```php use Util\Work; public function index() { $work = new Work(); echo $work->run(); // 输出 "Working" } ``` --- ### 五、注意事项 1. **自动加载**:ThinkCMF 5默认支持PSR-4自动加载,无需手动引入文件。 2. **Composer类库**:若类库通过Composer安装,直接通过命名空间调用即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值