我创建了一个帖子创建页面,该页面仅对使用以下控制器代码的登录用户可用
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StorePost ;
use App\Post;
class PostController extends Controller
{
public function __construst(){
$this->middleware('auth');
}
//
public function index()
{
# code...
$posts = Post::latest()->get();
return view('posts.index',compact('posts'));
}
public function show(Post $post)
{
# code...
return view('posts.show',compact('post'));
}
public function create()
{
# code...
return view('posts.create');
}
public function store(StorePost $request)
{
# code...
$validated = $request->validated();
Post::create(request(['title','body']));
return redirect('/');
}
}
web.php文件
<?php
Route::get('/','PostController@index')->name('home');
Route::get('/posts/create','PostController@create');
Route::post('/posts','PostController@store');
Route::get('/posts/{post}','PostController@show');
Route::get('/tasks','TasksController@index');
Route::get('/tasks/{tasks}', 'TasksController@show');
Route::post('/posts/{post}/comment','CommentController@store');
Route::get('/register','RegistrationsController@create');
Route::post('/register','RegistrationsController@store');
Route::get('/login','SessionsController@create');
Route::get('/logout','SessionsController@destroy');
我面临的问题是任何人都可以访问帖子创建页面,
答案 0 :(得分:1)
如@Mozammil所述,名为__construst()
的函数不是构造函数。它只是一个名为__construst
的函数。中间件在控制器中的工作方式是这样的,您必须将中间件添加到构造函数中,该构造函数是一种特定类型的函数,必须命名为__construct
。
如果您使用其他名称命名,则在创建对象时将不会调用它,并且永远不会执行中间件。