第一个问题用findOrFail方法求解
有没有办法阻止用户检查不存在的路线?
示例我有去http://127.0.0.1:8000/event/9的路线
但是不存在带有id 8的事件,如果用户要访问该id,就会进行以下操作:
Attempt to read property "photo_patch" on null (View: C:\xampp\htdocs\Laravel1\resources\views\frontend\eventView.blade.php) 或数据库中的任何其他错误--该记录不存在。
第二个问题是如何打开laravel中的高级URL,所以我的页面上显示的是http://127.0.0.1:8000而不是http://127.0.0.1:8000/events之类的东西。
我知道它在配置文件中,但我找不到它。
使用它的示例类和路由:
-----------------------------Class----------------
public function eventView($id)
{
$notDisplay = Auth::user();
$eventView = Event::findOrFail($id);
if(!$notDisplay){
$eventView->displayed = $eventView->displayed +1;
$eventView->save();
}
return view('frontend/eventView', ['eventView' => $eventView]);
}
----------------Route-----------------
Route::get('event/' . '{id}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');发布于 2021-08-26 15:24:39
首先,使用容器!Laravel的服务容器非常强大,您的控制器解析用例是您应该使用的最常见的地方之一。url参数和控制器参数必须匹配才能工作。
你的路线:
Route::get('event/' . '{event}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');你们的主计长:
public function eventView(Event $event)
{
return view('frontend/eventView', ['event' => $event]);
}当利用Laravel的依赖注入和容器时,您可以免费获得findOrFail()。您还应该删除您的auth检查,并使用路由中间件处理它。
在“美化”urls方面,Laravel的路由模型绑定特性允许您控制用于容器解析的模型的属性。例如,让我们假设您的事件有一个您希望使用的唯一段塞,而不是自动增量id:
Route::get('event/' . '{event:slug}', [App\Http\Controllers\FrontendController::class, 'eventView'])->name('eventView');Laravel的路由功能提供了一个后备功能,如果路由模型绑定失败,您可以微调用户重定向的位置。
https://laravel.com/docs/8.x/routing#fallback-routes
防止未经授权的个人编辑他人的事件。我首先要设置的保护是在持久化时(当保存到数据库时)。虽然您可以在代码库中发生持久性的每一个地方都这样做,但是Laravel的观察者特性可能是非常合适的。这样,您就可以确信,无论向应用程序添加了什么代码,在对事件进行任何更改之前,始终会运行所有权检查。
https://laravel.com/docs/8.x/eloquent#observers
我要提供保护的第二个地方是在任何可以改变事件的路由上使用路由中间件。这样,在用户有机会尝试编辑之前,就可以将用户从他们不拥有的事件中重定向。
https://laravel.com/docs/8.x/middleware#assigning-middleware-to-routes
https://stackoverflow.com/questions/68939657
复制相似问题