【问题标题】:Declaration of App\Http\Requests\Comment\CreateRequest::authorize() should be compatible with App\Http\Requests\Request::authorize()App\Http\Requests\Comment\CreateRequest::authorize() 的声明应该与 App\Http\Requests\Request::authorize() 兼容
【发布时间】:2016-06-13 12:22:02
【问题描述】:

您好,我正在为我的 laravel 应用程序创建我的评论系统,但是当我尝试评论时出现此错误.. 基本上当用户未登录并且他尝试评论并提交时,它应该将他重定向到登录页面,所以我的 CreateRequest 文件是这样的

<?php

namespace App\Http\Requests\Comment;

use App\Http\Requests\Request;
use App\Repositories\Image\ImageRepository;

class CreateRequest extends Request {
    /**
     * Determine if the user is authorized to make this request.
     *
     * @param ImageRepository $image
     * @return bool
     */
    public function authorize(ImageRepository $image) {
        $image = $image->getById($this->route('id'))->first();
        if (!$image) {
            return false;
        }
        return auth()->check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules() {
        return [
            'comment' => ['required', 'min:2'],
        ];
    }

    /**
     * @return \Illuminate\Http\RedirectResponse
     */
    public function forbiddenResponse() {
        return redirect()->route('login');
    }
}

我的App\Http\Requests\Request 文件是这个

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

abstract class Request extends FormRequest {
    public function authorize() {
        return true;
    }
}

如果我删除

public function authorize() {
    return true;
}

然后 cmets 工作,如果用户未登录,则用户将被重定向到登录页面,但我的登录无效,当我尝试登录时被禁止

我在这个项目的基础上开发我的应用程序https://github.com/laravelish/EasyAdmin 希望有人可以帮助我

【问题讨论】:

    标签: laravel laravel-5.2 laravel-request


    【解决方案1】:

    您已经在抽象 Request 类中定义了 authorize 方法:

    public function authorize() {
        return true;
    }
    

    注意它不带任何参数。现在,如果您扩展这个抽象类(就像您对 CreateRequest 所做的那样)并编写一个 authorize 方法,您必须使用相同的签名。具体来说:authorize 不能带任何参数,因为它不在抽象类中。


    如果您要从抽象类中删除 authorize 方法,这个特定错误就会消失。但是我不确定这会解决你的问题。我不认为 Laravel 为 authorize 方法提供依赖注入,你不能像那样注入你的存储库。

    这是解决这两个问题的一种方法:

    public function authorize() {
        $image = app(ImageRepository::class)->getById($this->route('id'))->first();
        ...
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2022-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多