1
  1. 创建应用example,应用目录apps/example,目录结构如下
    example/appinfo:包含应用元数据和配置
    example/css :包含CSS
    example/img :包含图标和图像
    example/js :包含JavaScript文件
    example/lib :包含应用程序的PHP类文件
    example/templates :包含模板
    example/tests :包含测试
  2. 创建元数据配置文件

    参考网址:

       https://docs.nextcloud.com/server/14/developer_manual/app/init.html
       https://docs.nextcloud.com/server/14/developer_manual/app/info.html

    创建文件example/appinfo/info.xml

    <?xml version="1.0"?>
    <info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
        <id>example</id>
        <name>Example</name>
        <summary>Example summary</summary>
        <description>Example  description</description>
        <version>1.0.0</version>
        <licence>agpl</licence>
        <author>Author</author>
        <category>multimedia</category>
        <bugs>https://github.com/nextcloud/news/issues</bugs>
        <dependencies>
            <nextcloud min-version="10"/>
        </dependencies>
        <!--navigation 应用程序的导航条目--> 
        <navigation>
            <name>example</name>
            <route>example.index</route>
            <order>0</order>
        </navigation>
    </info>

    这样应用安装目录就可以看到example应用了


  3. 创建控制器 example/lib/Controller/ExampleController.php
    https://docs.nextcloud.com/se...
<?php
    namespace OCA\Example\Controller;
    
    use OCP\AppFramework\Controller;
    use OCP\AppFramework\Http\DataResponse;
    use OCP\IRequest;
    
    class ExampleController extends Controller {
        
        public function __construct(string $appName, IRequest $request){
            parent::__construct($appName, $request);
        }
        /**
         * @NoCSRFRequired
         *
         * @return DataResponse
         */
        public function index() {
            return new DataResponse([
                'test'
            ]);
        }
    
    }
控制器函数注解的用处:
```
/**
 * @PublicPage  公共界面
 * @NoCSRFRequired  不做csrf校验
 * @NoAdminRequired 不知道做啥 猜吧
 * @return DataResponse
 */
```
  1. 创建example/lib/AppInfo/Application.php 为了拥有更清晰的代码结构
<?php
    namespace OCA\Example\AppInfo;
    
    use OCP\AppFramework\App;
    use \OCP\IContainer;
    use OCA\Example\Controller\ExampleController;
    
    
    class Application extends App {
    
        public function __construct(array $urlParams=array()){
            
            parent::__construct('example', $urlParams);
            
        }
        
        public function register(){
            
            $container = $this->getContainer();
    
            /**
             * Controllers
             */
            $container->registerService('Example', function(IContainer $c) {
                return new ExampleController(
                    $c->query('AppName'),
                    $c->query('Request')
                );
            });
            
        }
    }
  1. 创建应用加载和执行文件
    创建文件example/appinfo/app.php

    <?php
    
    $app = new \OCA\Example\AppInfo\Application();
    $app->register();
  2. 创建路由
    example/appinfo/routes.php

    <?php
    
    return [
        'routes' => [
            ['name' => 'example#index', 'url' => '/', 'verb' => 'GET']
        ]
    ];
  3. 创建视图
    待续

改改心情
411 声望6 粉丝

温故知新,用时再找