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

为什么laravel路由在作为链接使用时可以传递参数,但在重定向中使用时却不行,会产生缺少参数1的错误?

孟晨朗
2023-03-14

路由-我有2条与此相关的路由

route::resource(“items”,“itemscontroller”);
route::get(“process/{process}/items”,“itemscontroller@index”);

当我使用第2个时,index函数(在上面提到的控制器中)拾取进程id并无故障地运行。

这是一个单独视图上的链接,该视图使用了上面列出的第二条路由:

{{html::link(“process/”.$process->id.“/items”,“manage items”,array(“class”=>“btn btn-primary”))}}

当我从同一个控制器中的update函数使用重定向时

“ItemsController::Index()缺少参数%1”

这是一个接受参数的函数,因此它可以显示具有该ID的所有项。

我用什么似乎并不重要。下面是我为了重定向到索引函数而尝试的一些语句:

>

  • 返回redirection::route('items.index',array($data['process_id']));

    返回redirect::action('itemscontroller@index',array($data['process_id']));

    我也试过用“with(...)”

    以下(使用route或action)给出一个“route not defined”错误:

    返回redirect::action('process/'.$data['process_id'].'/items');

    我认为像在索引函数中那样重新创建视图不是一个好的做法。我应该只是能够重定向和完成了它。

    我做错了什么?

    模型关系如下:1项目有许多项1项有许多属性1属性有许多扩展

    <?php
    
    class ItemAttributesController extends \BaseController {
    
        /**
         * Display a listing of itemattributes
         *
         * @return Response
         */
        public function index($item_id)
        {
            return $this->makeIndex($item_id);
        }
    
        /**
         * Show the form for creating a new itemattribute
         *
         * @return Response
         */
        public function create()
        {
            return View::make('item_attributes.create');
        }
    
        /**
         * Store a newly created itemattribute in storage.
         *
         * @return Response
         */
        public function store()
        {
            $validator = Validator::make($data = Input::all(), Itemattribute::$rules);
    
            if ($validator->fails())
            {
                return Redirect::back()->withErrors($validator)->withInput();
            }
    
            $attribute = Itemattribute::create($data);
    
            // add created attribute id to sequence in the item for this attribute
            $item = Item::findOrFail($attribute->item_id);
    
            // get the sequence data
            // append the attribute id
            if (isset($item->attribute)){
                $item->attribute = $item->attribute.', '.$attribute->id;
            } else {
                $item->attribute = $attribute->id;
            }
    
            $item->save();
    
            return $this->makeIndex($data['item_id']);  
    
        }
    
        /**
         * Display the specified itemattribute.
         *
         * @param  int  $id
         * @return Response
         */
        public function show($id)
        {
            $itemattribute = Itemattribute::findOrFail($id);
    
            return View::make('item_attributes.show', compact('itemattribute'));
        }
    
        /**
         * Show the form for editing the specified itemattribute.
         *
         * @param  int  $id
         * @return Response
         */
        public function edit($id)
        {
            $itemattribute = Itemattribute::find($id);
    
            return View::make('item_attributes.edit', compact('itemattribute'));
        }
    
        /**
         * Update the specified itemattribute in storage.
         *
         * @param  int  $id
         * @return Response
         */
        public function update($id)
        {
            $itemattribute = Itemattribute::findOrFail($id);
    
            $validator = Validator::make($data = Input::all(), Itemattribute::$rules);
    
            if ($validator->fails())
            {
                return Redirect::back()->withErrors($validator)->withInput();
            }
    
            $itemattribute->update($data);
    
            return $this->makeIndex($data['item_id']);  
        }
    
        /**
         * Remove the specified itemattribute from storage.
         *
         * @param  int  $id
         * @return Response
         */
        public function destroy($id)
        {
            $attribute = Itemattribute::findOrFail($id);
    
            //find the item
            $item = Item::findOrFail($attribute->item_id);
    
            // get the sequence string
            if (isset($item->attribute)){
                // convert to array
                $arr=explode(",",$item->attribute); 
                // remove item
                if(($key = array_search($id, $arr)) !== false) {
                    unset($arr[$key]);
                }
                // convert back to string and replace initial string
                $item->attribute = implode(",", $arr);
                // save
                $item->save();
            }
    
            ItemAttribute::destroy($id);
    
    //      return Redirect::route('item_attributes.index');
            return $this->makeIndex($attribute->item_id);   
        }
    
        private function makeIndex($item_id){
            $item = Item::findOrFail($item_id);
            $project = Project::findOrFail($item->project_id);
            $item_attributes = DB::table('item_attributes')->where('item_id', $item->id)->get();
    
            return View::make('item_attributes.index',  compact('item_attributes', 'item', 'project'));
    //      return Redirect::to('item_attributes', );
        }
    }
    
    Route::get('/', function()
    {
        return View::make('home');
    });
    
    Route::resource('projects', 'ProjectsController');
    Route::resource('items', 'ItemsController');
    Route::resource('item_attributes', 'ItemAttributesController');
    Route::resource('attribute_extentions', 'AttributeExtensionsController');
    
    
    Route::get('project/{projects}/items', 'ItemsController@index');
    Route::get('project/{projects}/item/create', 'ItemsController@create');
    
    Route::get('item/{items}/item_attributes', array('as' => 'item_attributes', 'uses' => 'ItemAttributesController@index'));
    Route::get('item/{items}/attribute_extentions', 'AttributeExtensionsController@index');
    
  • 共有1个答案

    全弘深
    2023-03-14

    您没有正确使用route操作,它应该指向controller@函数。

    return Redirect::action('ItemsController@index', array('item_id' => 1));
    
     类似资料:
    • 问题内容: 在flask中,我可以这样做: 并且如果foo.html包含,页面将会显示。但是,如果有一条通往foo的路线怎么办: 在这种情况下,如果我仍然希望这种逻辑发生,那么进入foo.html的唯一方法是通过: 因此,如何使该变量传递到路由,这样我不必在加载路由之前重写重写该路由计算的逻辑代码? 问题答案: 你可以将消息作为显式URL参数传递(正确编码),也可以在重定向之前将消息存储到(coo

    • 问题内容: 我正在尝试通过ui-router state.go传递参数 但是,我不确定如何传递参数。这是我的代码 我可以将页面重定向到second.html,但似乎无法获取传递给secondCtrl的参数。有人可以帮我吗? 谢谢。 问题答案: 首先,您必须在route中添加参数。 现在添加第一个控制器 在第二个控制器中注入$ stateParams

    • 问题内容: 我正在尝试使用Struts2实现以下目标 这就是我在做什么: 为什么以上内容不能重定向为以下任何建议: 问题答案: 到目前为止,对我有用的解决方案是 在操作中定义味精的设置者和获取者的位置

    • 问题内容: 我最近遇到了一个有趣的行为。似乎如果我重写.equals()以采用Object以外的参数,则不会调用它。谁能向我解释为什么会这样?这似乎违反了我对OOP中多态性的理解,但是也许我缺少了一些东西。 这是显示我所看到的内容的简单得多的代码: 运行此命令时,将打印“ ”。看起来好像调用了equals(Object)函数,即使还有另一个可行的函数也是如此。相比之下,如果我这样写等于,则代码按预

    • Swagger提出了一个类似的问题:重用枚举定义作为查询参数。我的问题是我是否可以使用枚举(可重用或不可重用)。每当我尝试这样做的时候,我都会得到错误,但是使用字符串不会给出任何错误 我的问题是上面的例子是否有效,或者我应该尝试什么可能的改变。我使用的是OpenAPI 3.0.0。 错误: 我对XX.client知之甚少.cpp .它是一个自动生成的文件,是在编译yaml文件后构建的。

    • 当我运行flink时,java中的scala REPL脚本无法编译。