【问题标题】:How to call custom action in controller(laravel) using AngularJS如何使用 AngularJS 在控制器(laravel)中调用自定义操作
【发布时间】:2015-08-06 14:31:50
【问题描述】:

我正在使用 laravel 5。

我的控制器中有一个自定义操作。通过自定义,我的意思是它不被资源对象以角度使用。以下是我的控制器的代码。

class ServicesController extends Controller {
public function __construct()
    {
        $this->middleware('guest');
    }

public function extras()
    {
         // code here
    }
}

这是我在 Angular 脚本中的服务代码。

(function() {

    'use strict';

    angular
        .module('bam')
        .factory('myservice', myservice);

    function myservice($resource) {

        // ngResource call to the API for the users
        var Serviceb = $resource('services', {}, {
            update: {
                method: 'PUT'
            },
            extras: {
                method: 'GET',
                action: 'extras'
            }
        });
     function getExtras(){
            return Serviceb.query().$promise.then(function(results) {
                return results;
            }, function(error) {
                console.log(error);
            });
        }
 }

})();

现在,这里的query() 会将请求发送到 laravel 控制器中的 index 方法。如何在getExtras() 方法中访问extras() 操作?

【问题讨论】:

    标签: php angularjs laravel-5


    【解决方案1】:

    看起来您快到了 试试下面的示例 我尝试使用您在问题中的内容,并添加了一些其他自定义端点作为示例。您需要一个与示例类似的基本 URL 设置,以便您可以从有效负载中为其提供一个 id,以便 $resource 可以设置您的基本 CRUD。否则,要使用相同的资源端点创建自定义路由,您可以添加一些额外的操作,就像您在问题中所做的那样,但将您的自定义应用于基本端点 URL。

    .factory('ServicesResource', ['$resource',
        function ($resource) {
    
            // Parameters used in URL if found in payload
            var paramDefaults = {
                id: '@id',
                param: '@param'
            }
    
            // Additional RESTful endpoints above base CRUD already in $resource
            var actions = {
    
                custom1: {
                    method: 'GET',
                    url: '/api/services/custom',
                },
                custom2: {
                    method: 'GET',
                    url: '/api/services/custom/:param',
                },
                extras: {
                    method: 'GET',
                    url: '/api/services/extras' 
                }
                update: {
                    method: 'PUT'
                }
            }
    
            // Default URL for base CRUD endpoints like get, save, etc
            return $resource('/api/services/:id', paramDefaults, actions);
        }])
    

    现在你可以依赖注入工厂并像这样使用它:

    var payload = {param:'someParam'};
    
    ServicesResource.custom(payload).$promise.then(function(response){
    
        // handle success
    
    }, function(reason) {
    
        // handle error
    });
    

    或额外的:

    ServicesResource.extras().$promise.then(function(response){
    
        // Handle success
    
    }, function(reason) {
    
        // Handle error
    });
    

    在 Laravel 中,你的路线可能是这样的:

    Route::get('services/{param}/custom', 'ServicesController@custom');
    

    或者像这样的额外内容:

    Route::get('services/extras', 'ServicesController@extras');
    

    【讨论】:

      【解决方案2】:

      我使用$http 得到了我想要的东西。

      function getExtras(){
        return $http.get('/services/extras').success(function (results) {
            return results;
        });
      }
      

      但是,如果有人建议我如何使用 Serviceb.query().$promise.then 进行操作,那就太好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-22
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 2017-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多