Laravel 5.4:通过请求将变量传递给控制器



一般来说,这应该是一个相当简单的问题。IT应该与以下关于堆栈溢出的问题非常相似

但看到两年过去了,也许一些语法已经改变了。

我想做的只是将一个变量从中间件传递给控制器,所以我不会复制 mysql 查询。

这是我的中间件:

namespace AppHttpMiddleware;
use Closure;
class CheckRole 
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $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。

所以我想把它传递给我的管理员控制器:

<?php
namespace SleepingOwlAdminHttpControllers;
use IlluminateHttpRequest;
use IlluminateRoutingController;
use SleepingOwlAdminFormFormElements;
use SleepingOwlAdminFormColumnsColumn;
use SleepingOwlAdminDisplayDisplayTable;
use IlluminateContractsSupportRenderable;
use SleepingOwlAdminDisplayDisplayTabbed;
use IlluminateValidationValidationException;
use SleepingOwlAdminContractsAdminInterface;
use SleepingOwlAdminModelModelConfiguration;
use IlluminateContractsFoundationApplication;
use SleepingOwlAdminContractsFormFormInterface;
use SleepingOwlAdminContractsModelConfigurationInterface;
use SleepingOwlAdminContractsDisplayColumnEditableInterface;
class AdminController extends Controller 
{
/**
* @var DaveJamesMillerBreadcrumbsManager
*/
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;

尝试了一段时间后,似乎没有任何效果,我不断得到一个空值。从根本上说,这应该不是非常困难,但我似乎关闭了语法或没有使用正确的命名空间?

而不是这个代码行:

$request->merge(['group' => 123]);

您可以尝试:

$request->request->add(['group' => 123]);

此代码行将要做的是,如果$request中存在名为group的参数,它将用新值覆盖,否则它将向$request添加新参数group

在控制器中,可以将group参数的值获取为:

$group = $request->group;$group = $request->input('group');

感谢@Rahul-Gupta和@shock_gone_wild的共同努力。我想这是共同努力的结果。

第一个问题是我正在使用sleepingOwl laravel样板。对于刚接触拉拉维尔的人来说,这可能不是最好的主意。(对MVC/PHP来说并不陌生(。

根据@shock_gone_wild评论,决定将我的测试转移到一个简单的控制器上,而不是睡觉的猫头鹰废话。(他们有很多代码。无论如何,我相信这有所帮助。我确实将中间件保留在构造函数中,因为我没有将中间件应用于路由。

然后我遵循@Rahul-Gupta语法。

所以这是最终结果,希望有一天这会拯救某人......

namespace AppHttpMiddleware;
use Closure;
class CheckRole {
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $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 IlluminateHttpRequest;
use Apptask;
use AppUser;
use AppHasRoles;
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'));
}
}

相关内容

  • 没有找到相关文章

最新更新