lucasromanojf/ext-direct

此包最新版本(0.2)没有可用的许可信息。

Laravel ExtJS/Sencha direct 提供商

0.2 2016-06-07 21:50 UTC

This package is auto-updated.

Last update: 2024-09-05 13:56:40 UTC


README

##信息 这是 laravel 4.x 的 ext-direct 提供商(也支持 extjs 5)

ext-direct 的理念是允许 JavaScript 调用远程 PHP 方法,就像它们是客户端 JavaScript 方法一样。这大大减少了开发时间。

高度(几乎99%)基于 http://www.sencha.com/forum/showthread.php?102357-Extremely-Easy-Ext.Direct-integration-with-PHP

原始类仅稍微修改。

##安装##

将此行添加到 composer.json 的 require 列表,并运行 composer update

"bulforce/ext-direct": "dev-master"

添加到 app.php 的 'providers' 数组

'Bulforce\ExtDirect\ExtDirectServiceProvider', 

此包附带一个 Facade,但您不需要将其包含在 app.php 中,因为它会自动包含。

必须 发布或创建此配置文件

../laravel_project/app/config/packages/bulforce/ext-direct/config.php

必须 编辑 config.php 文件

<?php

return array(
    'namespace' => 'Ext.rpc',
    'descriptor' => 'Ext.rpc.REMOTING_API',
    'timeout' => 30,
    'debug' => true,
    'api_classes' => array(
        'Items' => 'ItemsController'
    )
);

最重要的部分是 api_classes 数组,在那里您必须列出所有您希望 extjs 直接调用的应用程序中的类(通常是控制器)。

注意 这不一定是关联数组,您可以直接在普通索引数组中列出类名。但是,如果您将它们作为关联数组列出,则可以使用数组元素 key 从 extjs 调用它们,而不是实际的控制器类名。这样,您可以隐藏您的真实应用程序结构,从前端隐藏。

直接方法标签 为了使控制器方法可供 extjs/sencha 直接调用,必须满足 两个 条件

1. Method needs to be declared as **public**
2. Method needs to contain comment tag @direct

示例

    /**
     * @direct
     */
    public function read($params = null) {
        return Item::take(50)->get();
    }

在 routes.php 中添加一个路由

    Route::any('/rpc', function() {
        return ExtDirect::provide();
    });

最后,在 index.html 中添加类似的内容(在 extjs 库之后和您的应用程序代码之前!!!)

<script type="text/javascript" src="http://laravel_project.dev/rpc?javascript"></script>

现在,您应该可以直接从 JavaScript 调用 Laravel 控制器方法

Ext.rpc.Items.read(function(response) {
    console.log(response);
});

//with params, params will be passed to the controller method as php object
Ext.rpc.Items.read({page: 5},function(response) {
    console.log(response);
});

//use it in direct stores api object
api: {
    read: Ext.rpc.Items.read
}