如何在laravel 4.1中将模型作为参数传递?

时间:2014-05-24 01:56:39

标签: php laravel laravel-4 laravel-routing

所以,也许我没有在我的模特之间很好地连接点。 我收到错误:

Argument 1 passed to RespuestaController::postRespuesta() must be an instance of Question, string given

当我在视图中传递问题模型时:

{{ Form::open( array( 'action' => array( 'RespuestaController@postRespuesta', $question->id ) ) )  }}

这是我的app / routes.php:

Route::model('respuesta', 'Respuesta');
Route::model('question', 'Question');

Route::resource('questions', 'QuestionController');
Route::controller('respuestas', 'RespuestaController');

和RespuestaController:

class RespuestaController extends \BaseController {

public function postRespuesta(Question $question)
{
    $validator = Validator::make(Input::all(),
        array(
            'respuesta' => 'required'
        )
    );

    if( $validator->fails() ){
        return Redirect::route('questions.show')
            ->withErrors($validator);
    }else{
        $respuesta = Input::get('respuesta');

        $respuesta = Respuesta::create(array(
                        'respuesta' => $respuesta
                    )
        );

        $respuesta->save();
        $question->respuesta()->associate($respuesta)->save();
        $respuesta->user()->associate(Auth::user())->save();

//$question = Question::find($question); //this works without (Question $question), but i think is not a good practice or is it??


    }


}

}

我正在进行模型绑定吗?或者仅适用于手动创建的路径,而不仅仅是 路由::控制器(' respuestas',' RespuestasController');

Thanx的支持。

1 个答案:

答案 0 :(得分:1)

您需要将资源名称绑定为与模型资源相同的名称(而不是模型名称) - 请尝试以下操作:

Route::model('questions', 'Question');   
Route::resource('questions', 'QuestionController');

注意 - 您无法在Route::controller()上使用此功能。

我个人建议不要使用resource()controller() - 而是手动定义所有路线。 This is a link to a great blog post by Phil Sturgeon了解为什么要考虑手动定义所有路线。