从Laravel 4.2升级到Laravel 5 - 容器

时间:2015-02-20 17:46:36

标签: laravel laravel-4 laravel-5

我仍然无法理解从Laravel 4.2到5.0的所有更改。

我已经设法导入了我的所有模型,控制器,配置等。我几乎所有的命名空间,但我似乎无法管理的一件事是将此代码从4.2 app\filters.php转换为我的新5.0应用

这是代码的一部分,下面有一些补充说明,我遇到了问题。添加了以下代码,以便我们可以方便地在组内请求当前用户的所有操作/可见字段的权限。

if(App::make('Authflag', $usergroup->id)->can(GroupPermissions::EDIT_MEMBERS)) ...

4.2的代码:

App::before(function($request) {

    App::instance('Authflags', array()); 

    App::bind('Authflag', function($app, $param) {

        $authflags = App::make('Authflags'); 

        if(isset($authflags[$param]))
        {
            return $authflags[$param]; 
        }

        // Calculate generate flag value

        $authflags[$param] = $authflag; 

        App::instance('Authflags', $authflags);

        return $authflag;
    });

});

解释

实例Authflags包含group_id => permissionObject

代码说明:

  • 获取Authflags数组实例
  • 如果我们已经拥有所需的permissionObject,则将其返回
  • 否则生成/计算/请求permissionObject
  • 更新Authflags实例
  • 返回创建的permissionObject

但无论我尝试什么,我都会继续ReflectionException in Container.php line 776: Class Authflag does not exist.

我尝试创建合同和服务,并在AppServiceProvider内设置绑定。但我很确定我做的是完全错误/不同的事情。

我试图在AppServiceProvder中修改此代码并进行一些修改。但它似乎错了,并没有奏效。

(想想看,整个代码可能已经在start/global.php

如何将此代码移植到Laravel 5.0?

1 个答案:

答案 0 :(得分:1)

您必须使用中间件“封装”。这是一个示例,它将显示您在应用程序的部分之前和之后放置自定义的位置。

use Closure;

class ChangeCookieLifetime {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        //anything put here will be run BEFORE your app
        $response = $next($request);
        //anything put here will be run AFTER your app
        return $response
    }

}

在你的特殊情况下,我会这样:

use Closure;

class ChangeCookieLifetime {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        App::instance('Authflags', array());

        App::bind('Authflag', function($app, $param) {

            $authflags = App::make('Authflags'); 
            if(isset($authflags[$param]))
            {
                return $authflags[$param]; 
            }

            // Calculate generate flag value
            $authflags[$param] = $authflag; 
            App::instance('Authflags', $authflags);
            return $authflag;
        });


        $response = $next($request);
        //anything put here will be run AFTER your app
        return $response
    }

}

虽然我不能保证我插入的部分会起作用,但这是从Laravel 4.2到Laravel 5的直接“翻译”