我正忙于在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传递它,以便它到达正确的方法.
嗯,无论如何这就是理论.
关于如何将行动注入路线的任何想法?
我已经通过Laravel初学者教程走了,现在我可以了解每一个主题在这些教程列出,并创造了自己的项目,但正如我在那些看到,导师们能够了解每个文件是为那些和有能力编辑它并根据需要进行更改.
那么他们如何深入学习,从哪个来源学习呢?
laravel laravel-middleware laravel-5.2 laravel-authorization
我使用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
当我开始考虑对路线进行分组并检查文档时。我在那里迷路了。前缀,中间件等东西太多了。
什么是组路线的最好方法是什么?
Route::group(['middleware' => 'admin'], function () {});
Route::group(['prefix' => 'admin'], function () {});
Route::group(['namespace' => 'admin'], function () {})
Run Code Online (Sandbox Code Playgroud)
哪种方法是最好的?又为什么呢?当用什么办法?
我读了源代码,只有一个管道将所有中间件作为数组读取。这些中间件应该在请求之前运行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 5.5 项目的每个渲染视图中?我想要一个 Composer 包,例如,它将一些 JavaScript 代码添加到每个渲染的视图中,而不需要对实际项目代码进行任何修改。
现在,我已经通过在包中创建视图并将其包含到我的布局标题中来实现这一点,但如果可以在不手动包含的情况下以某种方式完成此操作,那就更好了。
我创建了中间件
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 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 文档在控制器的 __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) laravel ×8
laravel-5 ×4
php ×4
laravel-5.2 ×2
jwt-auth ×1
laravel-5.3 ×1
laravel-6 ×1
routing ×1