一般来说,这应该是一个相当简单的问题。 IT应该与Stack Overflow
上的以下问题非常相似但是看到它已经两年了,也许有些语法已经改变了。
我想要做的就是将一个变量从中间件传递给控制器,所以我不会复制mysql查询。
这是我的中间件:
namespace App\Http\Middleware;
use Closure;
class CheckRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$id = $request->user()->id;
$rr = $request->user()->isSuperAdmin();
if ($request->user()->isSuperAdmin()) {
$request->merge(['group' => 123]);
return $next($request);
}
echo "not admin";
}
}
所以中间件工作正常,如果我在中间件上使用DD($ request),我看到我的组=>页面上的123。 (为了简单起见,现在它是123.)
所以我想把它传递给我的AdminController:
<?php
namespace SleepingOwl\Admin\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use SleepingOwl\Admin\Form\FormElements;
use SleepingOwl\Admin\Form\Columns\Column;
use SleepingOwl\Admin\Display\DisplayTable;
use Illuminate\Contracts\Support\Renderable;
use SleepingOwl\Admin\Display\DisplayTabbed;
use Illuminate\Validation\ValidationException;
use SleepingOwl\Admin\Contracts\AdminInterface;
use SleepingOwl\Admin\Model\ModelConfiguration;
use Illuminate\Contracts\Foundation\Application;
use SleepingOwl\Admin\Contracts\Form\FormInterface;
use SleepingOwl\Admin\Contracts\ModelConfigurationInterface;
use SleepingOwl\Admin\Contracts\Display\ColumnEditableInterface;
class AdminController extends Controller
{
/**
* @var \DaveJamesMiller\Breadcrumbs\Manager
*/
protected $breadcrumbs;
/**
* @var AdminInterface
*/
protected $admin;
/**
* @var
*/
private $parentBreadcrumb = 'home';
/**
* @var Application
*/
public $app;
/**
* AdminController constructor.
*
* @param Request $request
* @param AdminInterface $admin
* @param Application $application
*/
public function __construct(Request $request, AdminInterface $admin, Application $application)
{
$this->middleware('CheckRole');
因此,您可以看到我在此构造函数上调用中间件。在调用之后我应该能够做到这样的事情:
$request->get('group'); or $request->group;
经过一段时间的尝试,似乎没有任何工作,我一直得到一个空值。从根本上说,这应该不是非常困难,但我似乎关闭或不使用正确的名称空间?
答案 0 :(得分:1)
而不是这段代码:
$request->merge(['group' => 123]);
您可以尝试:
$request->request->add(['group' => 123]);
此代码行将执行的操作是如果group
中存在名为$request
的参数,它将使用新值覆盖,否则它将添加新参数group
到$request
在您的控制器中,您可以将group
参数的值设为:
$group = $request->group;
或$group = $request->input('group');
答案 1 :(得分:0)
感谢@ Rahul-Gupta和@shock_gone_wild的联合帮助。这是我猜的共同努力。
第一个问题是我正在使用sleepingOwl laravel样板。可能不是Laravel新手的最佳选择。 (不是MVC / PHP的新手)。
基于@shock_gone_wild评论,决定将我的测试移到一个简单的控制器上,而不是睡觉的猫头鹰胡说八道。 (他们有很多代码。)无论如何,我相信这有帮助。我确实在构造函数中保留了中间件,因为我没有将中间件应用于路由。
然后我跟着@ Rahul-Gupta语法。
所以这是最后的结果,希望有一天这会拯救某人......
namespace App\Http\Middleware;
use Closure;
class CheckRole {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
if ($request->user()->isSuperAdmin()) {
$request->request->add(['group' => 123]);
return $next($request);
} else {
echo "not admin";
}
}
}
然后这是简单的控制器。
use Illuminate\Http\Request;
use App\task;
use App\User;
use App\HasRoles;
class TaskController extends Controller {
public function __construct() {
// constructor code...
$this->middleware('auth');
$this->middleware('CheckRole');
}
public function index(Request $request) {
$group = $request->input('group');
echo "---->" . $group;
$tasks = Task::all();
return view('test_task', compact('tasks'));
}
}