Php 如何删除laravel 5中的帖子资源?
Laravel 5版本 我正在处理一个新的laravel 5版本的项目,由于某些原因,我无法删除帖子,当我按下delete键时,它只会将我重定向到id为/post/3的帖子显示页面,我会看到一个空白的白页,当我返回到index view时,我会看到所有的帖子,而其中一篇没有被删除。以下是我的资料: 发布迁移文件Php 如何删除laravel 5中的帖子资源?,php,laravel,laravel-routing,laravel-5,Php,Laravel,Laravel Routing,Laravel 5,Laravel 5版本 我正在处理一个新的laravel 5版本的项目,由于某些原因,我无法删除帖子,当我按下delete键时,它只会将我重定向到id为/post/3的帖子显示页面,我会看到一个空白的白页,当我返回到index view时,我会看到所有的帖子,而其中一篇没有被删除。以下是我的资料: 发布迁移文件 use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; clas
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreatePostsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function(Blueprint $table)
{
$table->increments('id');
$table->string('title')->default('');
$table->string('slug')->default('');
$table->text('body');
$table->integer('author_id');
$table->string('author');
$table->string('featured_image');
$table->softDeletes();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('posts');
}
}
PostsController
use Input;
use Redirect;
use Storage;
use SirTrevorJs;
use STConverter;
use Validator;
use Image;
use Boroughcc\Post;
use Boroughcc\Http\Requests;
use Boroughcc\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostsController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update(Post $post)
{
//
$this->middleware('auth');
$input = array_except(Input::all(), '_method');
$post->update($input);
return Redirect::route('posts.show', $post->slug)->with('message', 'Post updated.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy(Post $post)
{
//
//$post = Post::findOrFail($id);
$post->delete();
if($post->delete()) {
return Redirect::route('posts.index')->with('message', 'Post deleted.');
}
}
}
据我所知,这是可以的,但我认为这是删除方法,是它的一切。在我的routes文件中,我设置了route资源,以便在php artisan
中显示routes,我可以看到销毁路由,如下所示:
| | GET|HEAD | posts | posts.index | Boroughcc\Http\Controllers\PostsController@index | |
| | GET|HEAD | posts/create | posts.create | Boroughcc\Http\Controllers\PostsController@create | |
| | POST | posts | posts.store | Boroughcc\Http\Controllers\PostsController@store | |
| | GET|HEAD | posts/{posts} | posts.show | Boroughcc\Http\Controllers\PostsController@show | |
| | GET|HEAD | posts/{posts}/edit | posts.edit | Boroughcc\Http\Controllers\PostsController@edit | |
| | PUT | posts/{posts} | posts.update | Boroughcc\Http\Controllers\PostsController@update | |
| | PATCH | posts/{posts} | | Boroughcc\Http\Controllers\PostsController@update | |
| | DELETE | posts/{posts} | posts.destroy | Boroughcc\Http\Controllers\PostsController@destroy
使用删除按钮发布表单
在这里,我有一个简单的按钮,告诉表单从索引列表中删除资源并从表中获取它
{!! Form::open(array('class' => 'form-inline', 'method' => 'DELETE', 'route' => array('posts.destroy', $post->id))) !!}
<li>
<img src="{!! $post->featured_image !!}" alt="" />
<a href="{{ route('posts.show', $post->id) }}">{{ $post->title }}</a>
</li>
(
{!! link_to_route('posts.edit', 'Edit', array($post->slug), array('class' => 'btn btn-info')) !!},
{!! Form::submit('Delete', array('class' => 'btn btn-danger')) !!}
)
{!! Form::close() !!}
{!!表单::打开(数组('class'=>'表单内联','method'=>'删除','route'=>数组('posts.destroy',$post->id))
特色图片!!}“alt=”“/>
(
{!!链接到路由('posts.edit','edit',array($post->slug),array('class'=>'btn btn info')),
{!!Form::submit('Delete',array('class'=>'btn-btn-danger'))
)
{!!Form::close()!!}
我得到的是什么都没有,没有帖子被删除。任何答案或指向正确位置的点都会很棒。你想在这里使用
您可以转到app/Providers/RouteServiceProvider.php文件中的boot
方法并添加int:
$router->bind('posts','Boroughcc\Post');
要告诉laravel,您提供的posts
参数(在route:list
中可见)应绑定到Post`模型(laravel默认使用id)
或者,您也可以在app/Http/routes.php
中使用以下命令执行相同操作:
Router::bind('posts','Boroughcc\Post');
我不知道如何使用静态类Form,但几天前我仅使用HTML代码就发现了这个问题
这不起作用:
<form action="{{ action('Controller@destroy') }}" method="DELETE">
...
</form>
...
这很好:
<form action="{{ action('Controller@destroy') }}" method="POST">
<input type="hidden" name="_method" value="DELETE">
...
</form>
...
资料来源:
要删除模型,请执行以下操作
$model -> find($id);
$model -> delete();
或者干脆
$model -> destroy($id);
删除多行的步骤
$model -> destroy ([1,2,3]);
如何向用户邮寄申请表:
视图:
控制器:
use app\User;
use Illuminate\Support\Facades\Auth;
protected function destroy(Request $request)
{
$id= $request->id;
if (Auth::user()->id == $id){
$user= User::find($id);
$user-> delete();
Auth::logout();
return redirect()->route('welcome');
}else{
return redirect()->route('home');
}
}
protected function delete($id)
{
if (Auth::user()->id == $id){
$user= User::find($id);
$user-> delete();
Auth::logout();
return redirect()->route('welcome');
}else{
return redirect()->route('home');
}
}
如果()仅用于防止用户删除另一个,而Auth::logout()用于清除会话中的用户数据(如果您不使用用户将不需要这些数据),则必须使用==不===比较$id和Auth::user()->id,$id用作字符串,而Auth::user()->id用作数字
这种方式相当于在以下代码中使用get:
视图:
控制器:
use app\User;
use Illuminate\Support\Facades\Auth;
protected function destroy(Request $request)
{
$id= $request->id;
if (Auth::user()->id == $id){
$user= User::find($id);
$user-> delete();
Auth::logout();
return redirect()->route('welcome');
}else{
return redirect()->route('home');
}
}
protected function delete($id)
{
if (Auth::user()->id == $id){
$user= User::find($id);
$user-> delete();
Auth::logout();
return redirect()->route('welcome');
}else{
return redirect()->route('home');
}
}
你好,Marcin,我的路由文件中有这个:Route::model('posts','Post');Route::resource('posts','PostsController');Route::bind('posts',function($value,$Route){return Post::whereSlug($value)->first();})
这仍然不起作用,因为您可以看到路由已经在运行place@Mdunbavan所以试着在你的destroy
方法中检查$post
里面有什么:dd($post->toArray());
好的,它给了我一个post数组,这个数组很好,但是删除的数组显然没有填充数组:10[▼ "id“=>3”title“=>“Project 3”“slug”=>“Project-3”“body”=>“cddcddc”“author”=>0“author”=>“特色图片”=>“/private/var/folders/mf/srx7jt8s2rdg0mn5hr98cvz80000gn/T/phpZb0VAC”“创建于”=>“2015-02-07 17:17:31”“更新于”=>“2015-02-16 13:54:53”“删除于”=>null]
@Mdunbavan您是否已将添加到您的Post
模型中:使用软删除代码>?此外,现在您在控制器的destroy
方法中运行了两次delete
方法您是否尝试过使用forceDelete()?您确定依赖项注入正在正确检索帖子吗?如果在$post->delete()之前执行“return$post;”,会发生什么?它是否返回正确的型号?
Route::group(['middleware' => 'web'], function () {
Route::get('/home/delete/{id}', 'homeController@delete');
});
protected function delete($id)
{
if (Auth::user()->id == $id){
$user= User::find($id);
$user-> delete();
Auth::logout();
return redirect()->route('welcome');
}else{
return redirect()->route('home');
}
}