我仍然无法理解从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
代码说明:
但无论我尝试什么,我都会继续ReflectionException in Container.php line 776: Class Authflag does not exist.
我尝试创建合同和服务,并在AppServiceProvider
内设置绑定。但我很确定我做的是完全错误/不同的事情。
我试图在AppServiceProvder中修改此代码并进行一些修改。但它似乎错了,并没有奏效。
(想想看,整个代码可能已经在start/global.php
)
如何将此代码移植到Laravel 5.0?
答案 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的直接“翻译”