当前位置: 首页 > 知识库问答 >
问题:

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

洪胤
2023-03-14

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

}

后置控制

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

}

据我所知,这是好的,但我认为这是删除的方法,这一切都搞砸了。在我的路由文件中,我设置了路由资源,以便在php artisan中显示路由,我可以看到这样的销毁路由:

|        | 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() !!}

我得到的是什么都没有,没有帖子被删除。任何正确的答案或指向正确的地方都会很棒。

共有3个答案

宰父德馨
2023-03-14

您想在这里使用路由模型绑定。

您可以转到应用程序/提供商/RouteServiceProvider.php文件中的引导方法,并添加int:

$router->bind('posts','Boroughcc\Post');

要告诉laravel,您提供的posts参数(在route:list中可见)应绑定到Post`模型(laravel默认使用id)

或者你也可以在app/Http/routes.php中使用:

Router::bind('posts','Boroughcc\Post');

罗甫
2023-03-14

如何向用户邮寄申请表:

查看:

<form class="" action="{{ url('/home/destroy') }}" method="post">
  <li><button type="submit"><i class="fa fa-btn fa-sign-out"></i>Destroy user</button></li>
  <input type="hidden" name="id" value="{{Auth::user()->id}}">
  {{ method_field('DELETE') }}
  {!! csrf_field() !!}
</form>

路线:

Route::group(['middleware' => 'web'], function () {
 Route::delete('/home/destroy',[
  'as'=> 'home.destroy',
  'uses'=> 'homeController@destroy',
 ]);
});

控制器:

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

如果()仅用于防止用户删除另一个用户,而Auth::logout()用于清除会话中的用户数据(如果您不使用用户,则用户将不需要这些数据),则必须使用==不===比较$id和Auth::user()-

这种方式相当于使用get与此代码:

查看:

<li><a href="{{ url('/home/delete', Auth::user()->id) }}"><i class="fa fa-btn fa-sign-out"></i>Delete user</a></li>

路线:

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');
  }
}
温亮
2023-03-14

我不知道如何使用静态类表单,但几天前我仅使用HTML代码就发现了这个问题。

这不起作用:

<form action="{{ action('Controller@destroy') }}" method="DELETE">
...
</form>

这很好:

<form action="{{ action('Controller@destroy') }}" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    ...
</form>

资料来源:

  • http://laravel.io/forum/01-19-2015-delete-route-doesnt-work-page-not-found
  • https://laracasts.com/discuss/channels/general-discussion/how-to-updatedelete-using-forms-and-restful-controllers
 类似资料:
  • 创建帖子时,我的用户会提供一个外部链接。如果删除了外部链接,本地帖子也应该删除。为了实现这一点,我尝试运行以下代码... ...但是我得到了这些错误... 警告:get_headers(): php_network_getaddresses: getaddrinfo failed: name or service in /home/cornwal2/public_html/listings/wp-

  • 我试图删除特定id的帖子,但它给我错误为:代理错误:无法代理请求 /api/posts从localhost:3001http://localhost:8000。有关更多信息,请参阅https://nodejs.org/api/errors.html#errors_common_system_errors(ECONNREFUSED)。 这是我的行动: 这是我的减速机: 这是我的组件中使用的代码: 这

  • 我有一个JPA属性实体,它有子实体(多个比率和多个保留)。在我的JavaScript应用程序中,我通过REST{属性:{速率:[…],拉取JSON,保留[…]} 。速率和保留非常详细,因此当我发布属性更新(如更改名称)时,我会从JSON post有效负载中删除速率和保留。我希望Hibernate可以忽略掉丢失的钥匙,但遗憾的是,它正在删除save上的所有孩子。如果它们不存在,我如何指定Hibern

  • 我想知道是否可以删除自定义帖子类型的URL结构。例如,我有2个自定义帖子类型:投资组合和滑块。 我想保持像这样的投资组合帖子类型的URL结构:mysite.com/portfolio/item-1等。 但是我不希望滑动条帖子的URL结构,因为滑动条只会显示在主页上,我不希望访问者能够访问mysite.com/slider/slide-1。可能吗? 提前感谢:) Wordpress论坛帖子:http

  • 我计划建立一个小型的辅助项目,存储特定公共页面的帖子。并检测他们是否稍后删除帖子。推特也做了类似的事情。但我在Facebook上找不到类似的项目。 这样地:http://politwoops.sunlightfoundation.com/ 但是对于Twitter。我会用Python或C#来做 我该怎么办呢?有什么特别的代码或项目我可以学习?

  • 我做了以下练习: 做一个把任意数转换成二进制数的代码 反转二进制数并显示在屏幕上 计数(并在屏幕上显示)二进制数的开头有多少个零 去掉反转二进制数开头的所有零。 将新的二进制数转换回常规数,并在屏幕上显示该数。 目前我被困在第四步,有人能帮我吗?到目前为止,我有: 提前感谢:) 我已经得到了答案,第一个人已经帮了我很多。我还将学习并阅读其他答案。不要觉得有必要发布更多的回复(当然,除非你愿意):)

  • 我一直在查看praw的文档,但我根本找不到哪种方法可以查看所有帖子。我想做的是浏览所有帖子 格式有点错误,我间隔了4次并粘贴,但它仍然不起作用。