Im Allgemeinen sollte dies ein eher einfaches Problem sein. IT sollte der folgenden Frage auf Stack OverflowLaravel 5.4: Übergabe einer Variablen über Request an Controller
sehr ähnlich sein.
Alles, was ich tun möchte, ist eine Variable von der Middleware an den Controller übergeben, also bin ich nicht mysql-Abfragen duplizieren.
Hier ist meine Middleware:
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";
}
}
So ist die Middleware funktioniert gut und wenn ich DD ($ request) auf der Middleware Ich sehe meine Gruppe => 123 auf der Seite. (Im Moment ist es 123 aus Gründen der Einfachheit.)
So möchte ich es meinen Admincontroller weitergeben müssen:
<?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');
So wie man sehen kann ich die Middleware auf diesem Konstruktor aufrufen. scheint
$request->get('group'); or $request->group;
Nach dem Versuch, noch eine ganze Weile nichts zu arbeiten, und ich halte einen Nullwert bekommen: Nachdem es nennen sollte ich in der Lage, wie etwas zu tun sein. Grundsätzlich sollte das nicht sehr schwierig sein, aber ich habe anscheinend meine Syntax ausgeschaltet oder verwende nicht die richtigen Namensräume?
Nun technisch nennen Sie nicht wirklich die Middleware auf dem Konstruktor. Sie haben gerade gesagt, dass die CheckRole-Middleware für alle Routen angewendet werden sollte, die auf die Controller-Methoden zeigen. Ihr Beispiel funktioniert gut für mich, wenn ich dd ($ request-> all()) in einer Controller-Methode wie index aufrufen. Die Anfrage wird nicht innerhalb des Konstruktors geändert. –