按下按钮时显示控制器的var


Showing a var from a controller when pressing a button

我是laravel 4的新手。按下按钮时,我想在屏幕上显示一条消息。这是我的观点:

@section('content')
    <div class="page-header">
        <h3>
            Management
        <div class="pull-right">
                    {{ Form::submit('Save', array('class' => 'btn btn-small btn-info iframe')) }}
                @if(isset($pressMe))
                    {{$pressMe }}
                @endif
            </div>
        </h3>
    </div>
@stop

我的路线是这样定义的:

Route::get('pressMe', 'TestController@getIndex');
Route::post('pressMe', 'TestController@postTest');
Route::controller('pressMe', 'TestController');

最后,这是我的测试控制器:

<?php
class TestController extends BaseController {
/**
 * Inject the models.
 */
public function __construct() {
    parent::__construct ();
}
public function getIndex() {
    // Show the page
    return View::make ( 'admin/pressMe/index' )->with('pressMe', '');;
}
/**
 * Start Test script.
 */
public function postTest() {
    $pressMe = 'It works!';
    return View::make ( 'admin/pressMe/index' )->with('pressMe', $pressMe);
}
}

但是,当按下按钮时,屏幕上不会显示任何内容。

有什么建议我做错了什么?

我真的很感激你的回答!

更新

在我的过滤器文件中,我有一个针对CSS的保护,然而,我现在得到了以下错误:

Illuminate'Session'TokenMismatchException thrown with message ""
Stacktrace:
#21 Illuminate'Session'TokenMismatchException in C:'xampp'htdocs'laravel'lara'app'filters.php:96
#20 {closure} in <#unknown>:0
#19 call_user_func_array in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Events'Dispatcher.php:199
#18 Illuminate'Events'Dispatcher:fire in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Events'Dispatcher.php:154
#17 Illuminate'Events'Dispatcher:until in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'Router.php:1468
#16 Illuminate'Routing'Router:callRouteFilter in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'ControllerDispatcher.php:240
#15 Illuminate'Routing'ControllerDispatcher:callFilter in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'ControllerDispatcher.php:114
#14 Illuminate'Routing'ControllerDispatcher:before in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'ControllerDispatcher.php:55
#13 Illuminate'Routing'ControllerDispatcher:dispatch in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'Router.php:962
#12 Illuminate'Routing'Router:Illuminate'Routing'{closure} in <#unknown>:0
#11 call_user_func_array in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'Route.php:109
#10 Illuminate'Routing'Route:run in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'Router.php:1028
#9 Illuminate'Routing'Router:dispatchToRoute in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Routing'Router.php:996
#8 Illuminate'Routing'Router:dispatch in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Foundation'Application.php:775
#7 Illuminate'Foundation'Application:dispatch in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Foundation'Application.php:745
#6 Illuminate'Foundation'Application:handle in C:'xampp'htdocs'laravel'lara'vendor'barryvdh'laravel-debugbar'src'Middleware'Stack.php:34
#5 Barryvdh'Debugbar'Middleware'Stack:handle in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Session'Middleware.php:72
#4 Illuminate'Session'Middleware:handle in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Cookie'Queue.php:47
#3 Illuminate'Cookie'Queue:handle in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Cookie'Guard.php:51
#2 Illuminate'Cookie'Guard:handle in C:'xampp'htdocs'laravel'lara'vendor'stack'builder'src'Stack'StackedHttpKernel.php:23
#1 Stack'StackedHttpKernel:handle in C:'xampp'htdocs'laravel'lara'vendor'laravel'framework'src'Illuminate'Foundation'Application.php:641
#0 Illuminate'Foundation'Application:run in C:'xampp'htdocs'laravel'lara'public'index.php:49

那是我的过滤器:

Route::filter('csrf', function()
{
    if (Session::getToken() != Input::get('csrf_token') &&  Session::getToken() != Input::get('_token'))
    {
        throw new Illuminate'Session'TokenMismatchException;
    }
});

我做错了什么?

您的代码片段中有许多半完成的代码。

视图

你有一个提交按钮,但你没有合适的表格。要么使用ajax,要么使用javascript提交表单,或者更简单,只需编写表单即可。

@section('content')
    <div class="page-header">
        <h3>
            Management
        <div class="pull-right">
             <form method="post" action="/pressMe">
               <input type="submit" class="btn btn-small btn-info iframe" value="Save" />
             </form>
             @if(Session::has('pressMe'))
               {{Session::get('pressMe')}}
             @endif 
            </div>
        </h3>
    </div>
@stop

删除

 @if(isset($pressMe))
   {{$pressMe }}
 @endif

然后加上这个,

@if(Session::has('pressMe'))
    {{Session::get('pressMe')}}
@endif

就像我在上面的视图代码片段中所做的一样

在路由文件中:

Route::get('pressMe', 'TestController@getIndex');
Route::post('pressMe', 'TestController@postTest');

删除Route::controller('pressMe', 'TestController');

不要混淆手动布线和控制器布线。它以后会让你头疼。坚持一个。控制器路由、手动路由或休息路由不要混在一起

在测试控制器中

public function postTest() {
    $pressMe = 'It works!';
    return Redirect::to('/pressMe')->with('pressMe', $pressMe);
}

你就完了

更新#1

视图:

<form method="post" action="{{URL::action('TestController@postTest')}}">

测试控制器:

return Redirect::action('TestController@postTest')->with('pressMe', $pressMe);