【问题标题】:Laravel redirect to post methodLaravel 重定向到 post 方法
【发布时间】:2014-06-20 02:19:11
【问题描述】:

为了保持基本,我想创建一个书签应用程序

我有一个简单的书签

javascript:location.href='http://zas.dev/add?url='+encodeURIComponent(location.href)

我创建了一个休息控制器

<?php

use zas\Repositories\DbLinkRepository;

class LinksController extends BaseController {

protected $link;

function __construct(DbLinkRepository $link) {

        $this->link=$link;
        // ...
        //$this->beforeFilter('auth.basic', array('except' => array('index', 'show', 'store')));
        // ...
}


public function index()
{
    //return Redirect::to('home');
}
public function create()
{

}
public function store()
{
    return 'hello';
    //$this->link->addLink(Input::get('url'));
    //return Redirect::to(Input::get('url'));
}
public function show($id)
{
    //$url = $this->link->getUrl($id);
    //return Redirect::to($url);
}
public function edit($id)
{

}
public function update($id){

}
public function destroy($id){

}
}

在 routes.php 中,我创建了一个资源

Route::resource('links','LinksController');

因为我想将 /add 重定向到我添加的 store 方法

Route::get('/add',function(){
    return Redirect::action('LinksController@store');
});

但它从不显示 hello 消息,而是将我重定向到

http://zas.dev/links

我也试过

return Redirect::route('links.store');

没有成功

感谢您的帮助

【问题讨论】:

    标签: rest post laravel routing laravel-4


    【解决方案1】:

    好的,我现在知道你想要做什么了。这将起作用:

    Route::get('add', 'LinksController@store');
    

    删除:

    Route::resource('links','LinksController');
    

    并删除:

    Route::get('/add',function(){
       return Redirect::action('LinksController@store');
    });
    

    抱歉拖了这么久!

    【讨论】:

    • 感谢西德尼,但它并没有真正回答这个问题,也许我错过了一些东西。来自小书签的请求是 GET 而不是 POST,我在您的代码中看不到什么可以处理这个
    • 你从什么发送?框架(BackboneJS、EmberJS)还是常规的 AJAX 调用?
    • 来自我问题开头的书签,所以它真的很基本,但我的问题更多:为什么重定向到 store 方法不起作用
    • PS:你可以尝试这样放置路由:Route::get('add', 'LinksController@store');这对我有用,在我自己的资源控制器上尝试过!
    • 哇,就这么简单。正如您之前所说,重定向不适用于带有 restful 控制器的 POST,我真的不明白为什么,但您的解决方案正是我所需要的。创建一个答案,以便我为它投票
    【解决方案2】:

    问题是,一旦您Redirect::,您就会丢失所有Input 值,因此您应该在执行重定向时手动将它们提供给您的控制器,如下所示:

    Redirect::route('links.store', ["url" => Input::get("url")]);
    

    最后在你的store方法中添加一个$url参数来接收我们在上一个方法中给它的值,像这样:

    public function store($url) {
        $this->link->addLink($url);
        return Redirect::to($url);
    }
    

    【讨论】:

    • 感谢您的提示,但目前即使没有输入值也无法正常工作
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2016-09-15
    • 1970-01-01
    • 2020-06-28
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多