Php 如何删除laravel 5中的帖子资源?

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

Laravel 5版本

我正在处理一个新的laravel 5版本的项目,由于某些原因,我无法删除帖子,当我按下delete键时,它只会将我重定向到id为/post/3的帖子显示页面,我会看到一个空白的白页,当我返回到index view时,我会看到所有的帖子,而其中一篇没有被删除。以下是我的资料:

发布迁移文件

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');
      }
    }