代码之家  ›  专栏  ›  技术社区  ›  Blagoh

在“创建策略”中访问@存储参数

  •  1
  • Blagoh  · 技术社区  · 8 年前

    我有一条这样的路线 routes/api.php

    Route::group(['middleware' => 'auth:api'], function() {
    
        Route::post('messages/{pet}', 'MessageController@store')->middleware('can:create,message');
    
    });
    

    我们在这里看到,它具有隐含的 {pet} .

    我的控制器访问 {pet} 就像这样很好:

    app\Http\Controllers\MessageController.php

    public function store(Request $request, Pet $pet)
    {
        dd($pet);
    }
    

    我想要我的 ->middleware('can:create,message') 获取的参数 store 看到这里,所以我想 $request $pet ,这可能吗?

    这是我的电流 MessagePolicy@create

    app\Policies\MessagePolicy.php

    public function create(User $user, Request $request, Pet $pet)
    {
        dd($request); // dd($pet);
        return $user->can('view', $pet) && ($request->input('kind') == null|| $request->input('kind') == 'PLAIN');
    }
    

    而且 dd 由于某种原因不起作用。

    4 回复  |  直到 8 年前
        1
  •  1
  •   Maraboc    8 年前

    假设您希望为给定消息创建宠物,在本例中 implicit model binding

    在这种情况下,laravel提供了使用不需要模型的动作的可能性(参见 documentation -&燃气轮机;通过中间件部分)

    在这些情况下,您可以将类名传递给中间件。这个 类名将用于确定在以下情况下使用哪个策略:


    所以在你的情况下:

    Route::group(['middleware' => 'auth:api'], function() {
    
        Route::post('messages/{pet}', 'MessageController@store')->middleware('can:create,App\Pet');
    
    });
    

    在 PET政策 您可以使用request()helper方法:

    public function create(User $user)
    {
        return request('kind') == null|| request('kind') == 'PLAIN';
    }
    
        2
  •  1
  •   Andrei Sena    8 年前

    你可以使用 请求() helper方法。

    https://laravel.com/docs/5.5/helpers#method-request

        3
  •  0
  •   Andre Gusmao    8 年前

    这个 $request 有一个方法 has() Link ). 您可以更改方法以检查该值是否存在或是否等于 "PLAIN"

    public function create(User $user, Request $request)
    {
        return !$request->has('kind') || $request->input('kind') == 'PLAIN';
    }
    
        4
  •  0
  •   user1436631 user1436631    8 年前

    使用

    return ( $request->has('kind') )? $request->has('kind') && $request->input('kind') === 'PLAIN': true;