我的处境很困难。
我正在用刮刀构建一个出生列表克隆,但很难对其进行编码,因为我经验不足。我成功创建了一个包含多个表单的管理页面,用于插入网站、类别和链接表单,您可以在其中指定应在哪个链接上进行抓取以及将链接到哪个网站和类别。不过,添加这样的东西没问题,但是删除就不行了..
我的网站、类别和链接显示在我的管理页面上,每个元素都有一个抓取和删除按钮。当我删除行中的最后一项时,它会删除第一个元素。当我想删除其他内容时,laravel 会抛出一个异常,它尝试尝试读取 null 上的属性,这意味着它不再存在。当我在删除函数之前转储并死亡时,每个列表中的每个项目都有 id“1”。这就是为什么它删除一行中的第一项。有人可以帮我吗?
我认为这是因为请求删除该项目的 id 是从 url 中检索的,而 url 中给出的 id 是用户 id,即 1。所以如果有人可以给我提示以确保我可以以不同的方式给出用户的 ID。让我知道!
我的代码:
管理控制器:
$request->input('site'),
'url' => $request->input('url')
]);
return back();
}
public function destroyWeb(Request $request, $id)
{
$web = Website::find($id);
$web->delete();
return back();
}
public function storeCat(Request $request)
{
$cat = Category::create([
'title' => $request->input('title')
]);
return back();
}
public function destroyCat(Request $request, $id)
{
$cat = Category::find($id)->first();
$cat->delete();
return back();
}
public function storeLink(Request $request)
{
$link = Link::create([
'url' => $request->input('scrapeUrl'),
'main_filter_selector' => $request->input('filter'),
'website_id' => $request->input('website_id'),
'category_id' => $request->input('category_id'),
]);
return back();
}
public function destroyLink(Request $request, $id)
{
$link = Link::find($id);
dd($link);
$link->delete();
return back();
}
public function scrape(Request $request)
{
$link = Link::find($request->link_id);
$scraper = new Scraper (new Client());
$scraper->handle($link);
if($scraper->status == 1) {
return response()->json(['status' => 1, 'msg' => 'Scraping done']);
} else {
return response()->json(['status' => 2, 'msg' => $scraper->status]);
};
}
}
我的管理页面:
@include('partials.header')
Welkom {{ auth()->user()->name }}
Winkels
@foreach ($websites as $web)
@endforeach
Categorieën
@foreach ($categories as $category)
@endforeach
@include('partials.footer')
我的路线:
name('home');
Route::get('/home', [HomeController::class, 'home']);
Route::get('/listview', [ListviewController::class, 'listview'])
->name('lists');
Route::middleware('auth')->group (function ()
{
Route::get('/create', [NewlistController::class, 'newlist'])
->name('create');
Route::get('/dashboard/{role}/{id?}', [DashController::class, 'dashboard'])
->name('dashboard');
Route::post('/dashboard/{role}/{id}', [NewlistController::class, 'store']);
Route::get('/dashboard/{user_id}/{baby}', [BabyController::class, 'show'])
->name('baby');
Route::get('/dashboard/{user_id?}/{baby}/catalogus', [ScrapeController::class, 'show']);
Route::get('/admin/{id}', [AdminController::class, 'showAdmin'])
->name('admin');
Route::post('/admin/{id}/websites/', [AdminController::class, 'storeWeb'])
->name('newWeb');
Route::delete('/admin/{id}/websites/', [AdminController::class, 'destroyWeb'])
->name('delWeb');
Route::post('/admin/{id}/categories/', [AdminController::class, 'storeCat'])
->name('newCat');
Route::delete('/admin/{id}/categories/', [AdminController::class, 'destroyCat'])
->name('delCat');
Route::post('/admin/{id}/links/', [AdminController::class, 'storeLink'])
->name('newLink');
Route::delete('/admin/{id}/links/', [AdminController::class, 'destroyLink'])
->name('delLink');
});
替换此代码
有了这个
你的
destroyLink()方法应该包含这个public function destroyLink(Request $request) { $id = $request->id; $link = Link::find($id); $link->delete(); return back(); }