标签: laravel-middleware

拦截Laravel路由

我正忙于在Laravel 5.1中构建Restful API,其中API版本通过标头传递.这样我就可以对功能进行版本控制,而不是复制和粘贴整个路径组并增加版本号.

我遇到的问题是我想要版本化的方法,IE:

public function store_v1 (){  }
Run Code Online (Sandbox Code Playgroud)

我在路由中添加了一个中间件,我从头部捕获了版本,但现在需要修改请求以从控制器中选择正确的方法.

应用程序/ HTTP/routes.php文件

Route::group(['middleware' => ['apiversion']], function()
{
    Route::post('demo', 'DemoController@store');
}
Run Code Online (Sandbox Code Playgroud)

应用程序/ HTTP /中间件/ ApiVersionMiddleware.php

public function handle($request, Closure $next)
{
    $action = app()->router->getCurrentRoute()->getActionName();

    //  dd($action)
    //  returns "App\Http\Controllers\DemoController@store"
}
Run Code Online (Sandbox Code Playgroud)

从这里开始,我会将标题版本附加到$ action,然后通过$ request传递它,以便它到达正确的方法.

嗯,无论如何这就是理论.

关于如何将行动注入路线的任何想法?

php laravel laravel-routing laravel-5 laravel-middleware

2
推荐指数
1
解决办法
1463
查看次数

如何完全理解Laravel框架?

我已经通过Laravel初学者教程走了,现在我可以了解每一个主题在这些教程列出,并创造了自己的项目,但正如我在那些看到,导师们能够了解每个文件是为那些和有能力编辑它并根据需要进行更改.

那么他们如何深入学习,从哪个来源学习呢?

laravel laravel-middleware laravel-5.2 laravel-authorization

2
推荐指数
1
解决办法
3054
查看次数

Laravel 5 | 找不到接口“ Illuminate \ Contracts \ Routing \ Middleware”

我使用Laravel 5。

我尝试

 "use Illuminate\Contracts\Routing\Middleware;"
Run Code Online (Sandbox Code Playgroud)

将“中间件”实施为

class Language implements Middleware {
       // Some Functions 
  }
Run Code Online (Sandbox Code Playgroud)

我得到错误,

Interface 'Illuminate\Contracts\Routing\Middleware' not found
Run Code Online (Sandbox Code Playgroud)

实际上是该接口丢失了吗?

(OR)错误定义?

(OR)需要创建| 下载 ?

谢谢Q!

php laravel laravel-middleware laravel-localization laravel-5.2

2
推荐指数
1
解决办法
3731
查看次数

Laravel分组路由最佳前缀或中间件

当我开始考虑对路线进行分组并检查文档时。我在那里迷路了。前缀,中间件等东西太多了。

什么是组路线的最好方法是什么?

Route::group(['middleware' => 'admin'], function () {});

Route::group(['prefix' => 'admin'], function () {});

Route::group(['namespace' => 'admin'], function () {})
Run Code Online (Sandbox Code Playgroud)

哪种方法是最好的?又为什么呢?当用什么办法?

routing laravel laravel-routing laravel-middleware

1
推荐指数
2
解决办法
4440
查看次数

Laravel 如何知道请求处理后是否应该运行中间件?

我读了源代码,只有一个管道将所有中间件作为数组读取。这些中间件应该在请求之前运行dispatchToRouter.

return (new Pipeline($this->app))
    ->send($request)
    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter()); 
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建了一个后置中间件,则该后置中间件应该在请求处理后运行。这里以及何时在 Laravel 源代码中执行后置中间件?

laravel laravel-middleware

1
推荐指数
1
解决办法
1961
查看次数

Laravel 将内容添加到每个渲染视图

有没有办法将内容添加到 Laravel 5.5 项目的每个渲染视图中?我想要一个 Composer 包,例如,它将一些 JavaScript 代码添加到每个渲染的视图中,而不需要对实际项目代码进行任何修改。

现在,我已经通过在包中创建视图并将其包含到我的布局标题中来实现这一点,但如果可以在不手动包含的情况下以某种方式完成此操作,那就更好了。

php laravel laravel-5 laravel-middleware laravel-blade

0
推荐指数
1
解决办法
1555
查看次数

Laravel:如何检查刀片模板中的中间件

我创建了中间件

php artisan make:middleware isTeacher
Run Code Online (Sandbox Code Playgroud)

在 App/Http/isTeacher.php 中我放置了检查:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class isTeacher
{
  public function handle($request, Closure $next)
  {
    $user = Auth::user();

    if($user && $user->capability == 3)
    {
        return $next($request);
    }
    else
        return redirect('/login');
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我在 app/Http/Kernel.php 中定义了中间件

protected $routeMiddleware = [
    ...
    'auth.teacher' => \App\Http\Middleware\isTeacher::class,
    ...
];
Run Code Online (Sandbox Code Playgroud)

问题是:如何在刀片模板中查看教师能力?我正在尝试这样做:

@if (Auth::isTeacher())
Run Code Online (Sandbox Code Playgroud)

但不起作用

任何帮助表示赞赏

laravel laravel-5 laravel-middleware laravel-5.3

0
推荐指数
1
解决办法
2万
查看次数

在 Laravel 5.7 中,如何在内核中覆盖 Tymon Jwt-Auth 中间件?

我正在将 Laravel 5.7 用于某些 api。我还使用包https://github.com/tymondesigns/jwt-auth生成 JWT 令牌来验证用户。我很久以前就配置了所有东西,它运行良好。

我在RouteServiceProvider.php以下注册路由组routes/api_v1.php

Route::prefix('api/v1')
     ->middleware('api')
     ->namespace($this->namespace.'\API\V1')
     ->group(base_path('routes/api_v1.php'));
Run Code Online (Sandbox Code Playgroud)

config.auth.php我有带有驱动程序 jwt 的 api_v1 防护:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api_v1' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],
Run Code Online (Sandbox Code Playgroud)

我已经App/User.php实现Tymon\JWTAuth\Contracts\JWTSubject并实现了这两种方法。

但是当app/Http/Kernel.php我在中间件数组中添加时:

protected $routeMiddleware = [
    // previous middlewares,
    'jwt.auth' => \App\Http\Middleware\JWTAuthenticate::class
];
Run Code Online (Sandbox Code Playgroud)

routes/api_v1.php组下的路线jwt.auth

路由::中间件(['jwt.auth'])->组(函数(){

// Keep auto resource route at bottom …
Run Code Online (Sandbox Code Playgroud)

laravel-5 laravel-middleware jwt-auth

0
推荐指数
1
解决办法
3127
查看次数

在 Laravel 的 __construct 中添加中间件到控制器

我试图根据Laravel 文档在控制器的 __construct 中分配一个中间件,但它会引发以下错误:

BadMethodCallException
Method App\Http\Controllers\MyController::middlware does not exist.
Run Code Online (Sandbox Code Playgroud)

这是我的控制器类:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class MyController extends Controller
{

    public function __construct()
    {
        $this->middleware('myauth');
    }

    /** something */
    public function index()
    {
        return view('test.hi', ['name' => 'Moh']);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是中间件代码:

<?php

namespace App\Http\Middleware;

use Closure;

class myauth
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        echo …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-middleware laravel-6

-1
推荐指数
1
解决办法
8250
查看次数