不使用控制器的路由

时间:2014-10-11 21:07:45

标签: php laravel blade

您好我想使用一条不使用控制器的路线。为了清楚我想要实现的目标,我将首先向您展示我的视图代码index.blade.php:

<div class="form-group" id="work-bar"  >
    {{Form::open(array('route'=>'user.store.work', 'method'=>'post'))}}
    <div class="center-bar">
        <div class="row">
            <div class="col-md-12" id="column-make">
                {{Form::text('order_name', '',array('class' => 'form-control', 'id'=>'work-name'))}}
                <div id="BarDropDown" href="#" >
                    <select class="form-control" id="BarSelectDropDown" name="worktypes" >
                        <option  selected value="order" >Offerte</option>
                        <option value="project">Project</option>
                        <option value="task">Taak</option>
                    </select>
                </div>
                {{Form::hidden('route', Request::path() )}}
                {{Form::submit('Maken',  array('class' => 'btn btn-default', 'id' => 'work-submit'))}}
            </div>
        </div>
    </div>
    {{Form::close()}}
</div>

好的,这只是一个带有下拉列表的表单。这是我的路线的代码,名为routes.php:

<?php
Route::group(array('prefix'=>'user', 'before'=>'auth'),function(){
    Route::resource('usergroups', 'UsergroupsController');
    Route::resource('orders', 'OrdersController');
    Route::resource('users', 'UsersController');
    Route::resource('tasks', 'TasksController');
    Route::resource('projects', 'ProjectsController');

    Route::post('works',array('as'=>'user.store.work'), function() {
        $action = 'store';
        if (Input::get('worktypes')=="project") {
            return App::make('ProjectsController')->$action();  
        }
        elseif(Input::get('worktypes')=="order") {
            return App::make('OrdersController')->$action();
        }
        else{
            return App::make('TasksController')->$action();
        }
    });
});

Route::group(array('prefix'=>'user'),function(){
    Route::post('login',array('as'=>'user.login.post', 'uses'=>'UserAuthController@postLogin'));
    Route::get('logout',array('as'=>'user.logout', 'uses'=>'UserAuthController@getLogout'));
});

Route::get('/',array('as'=>'home', 'uses'=>'IndexController@getIndex'));
Route::post('/',array('as'=>'home', 'uses'=>'IndexController@getIndex'));

因此,我依赖于从我的下拉列表中选择的内容,我将转到ProjectsController或OrdersController或TasksController。存储项目或订单或任务。但是以下路线并不起作用:

Route::post('works',array('as'=>'user.store.work'), function() {
    $action = 'store';
    if (Input::get('worktypes')=="project") {
        return App::make('ProjectsController')->$action();  
    }
    elseif(Input::get('worktypes')=="order") {
        return App::make('OrdersController')->$action();
    }
    else{
        return App::make('TasksController')->$action();
    }
});

那是因为我收到以下错误:

call_user_func_array() expects parameter 1 to be a valid callback, no array or string given

我得到该错误的原因是,因为我必须再为该预期参数提供1个参数。所以我应该改变这个:

Route::post('works',array('as'=>'user.store.work'), function() {

有了这个:

Route::post('works',array('as'=>'user.store.work',  'uses'=>'OrdersController@store'), function() {

但我不想使用OrdersController中的store()方法,因为那时我只能将订单存储到数据库中。很高兴我在等你的回答。无论如何,谢谢你的回复。

1 个答案:

答案 0 :(得分:1)

您应该将路线更改为:

Route::post('works',array('as'=>'user.store.work', function() {
    // your function code here
    }
));

回调应该在数组内部而不是第3个参数