在laravel 4中没有调用控制器方法

时间:2014-03-25 06:20:29

标签: laravel

我正在尝试学习laravel 4.我创建了一个表单(使用视图)并使用索引方法通过控制器(testController)返回它。我使用artisan命令创建了这个控制器。

我在控制器中创建了另一个处理表单的方法(dologin)。在表单url参数中,我给出了dologin方法的地址。

这是路线:

Route::resource('test', 'testController');

这是控制器

<?php
class testController extends \BaseController {


    public function index()
    {
        return View::make('test.index');
    }

    public function dologin(){
        echo "working";
    }

这是索引视图文件

 {{ Form::open(array('url'=>'test/loginform')) }}
        {{ Form::text('username', null, array('placeholder'=>'Username')) }}<br/>
        {{ Form::password('password', array('placeholder'=>'Password')) }}<br/>

        {{ Form::submit('Login') }}
    {{ Form::close() }}

提交表格后,应该回复&#34;工作&#34;在浏览器中。但提交表单后,页面为空白。网址从

更改

/laravel/public/index.php/test /

/laravel/public/index.php/test/loginform

3 个答案:

答案 0 :(得分:6)

umefarooq的回答是正确的,但希望这个答案可以让您更深入地了解如何在Laravel开发中获得先机,以及一致的最佳实践编程风格。

首先,类名应该以大写字母开头。尝试保持方法/函数名称以小写字母开头,类名以大写字母开头。

其次,您不需要BaseController前面的\。如果您是控制器的名称间距,则只需要反斜杠。例如如果您的控制器位于文件夹Admin\TestController.php中,并通过在文件开头键入Admin将TestController放在<?php namespace Admin命名空间中。这是你应该使用\BaseController的时候,因为你告诉你的TestController从全局命名空间扩展BaseController。或者,在您宣布课程之前,您可以输入use BaseController;,而不必每次都放置\

与您的问题特别相关:

在路径文件中使用资源路由时,您告诉Laravel控制器可以使用以下任何或所有方法:indexshowcreate,{{ 1}},storeeditupdate

因此,destroy将指向您控制器文件夹中的TestController.php。

您的TestController的结构应如下所示,大多数安静的控制器将使用以下作为某种样板:

Route::resource('test', 'TestController');

此外,使用资源控制器的好处在于您可以利用命名路由。

在终端窗口中输入

,输入<?php class TestController extends BaseController { public function __construct() { } // Typically used for listing all or filtered subset of items public function index() { $tests = Test::all(); return View::make('test.index', compact('tests')); } // Typically shows a specific item detail public function show($id) { $test = Test::find($id); return View::make('test.show', compact('test')); } // Typically used to show the form which creates a new resource. public function create() { return View::make('test.create'); } // Handles the post request from the create form public function store() { $test = new Test; $test->attribute1 = Input::get('attribute1'); $test->attribute2 = Input::get('attribute2'); $test->attribute3 = Input::get('attribute3'); $test->attribute4 = Input::get('attribute4'); if ($test->save()) { return Redirect::route('test.show', $test->id); } } // Shows the edit form public function edit($id) { $test = Test::find($id); return View::make('test.edit', compact('test')); } // Handles storing the submitted PUT request from the edit form. public function update($id) { $test = Test::find($id); $test->attribute1 = Input::get('attribute1'); $test->attribute2 = Input::get('attribute2'); $test->attribute3 = Input::get('attribute3'); $test->attribute4 = Input::get('attribute4'); if ($test->save()) { return Redirect::route('test.show', [$id]); } } // Used to delete a resource. public function destroy($id) { $test = Test::find($id); $test->delete(); return Redirect::route('test.index'); } }

您应该看到7条命名路线。

php artisan routes

所以在你的表格中,而不是做

test.index test.destroy test.show test.edit test.destroy test.create test.update 您可以将网址指向命名路线:

{{ Form::open(array('url'=>'test/loginform')) }}

这样,如果您更改了网址,或者需要移动网站结构,这将很容易,因为表单post url将自动绑定到routes文件中的指定路由。您不需要更新每个视图,以确保网址指向正确的位置。

最后,作为一个起点,我建议使用JefreyWay / Laravel-4-Generators包。 https://github.com/JeffreyWay/Laravel-4-Generators。使用它们来创建资源,控制器,视图等,并查看生成器如何为您构建模型,视图和控制器。

这是帮助您入门的另一个资源:

https://laracasts.com/lessons/understanding-rest

答案 1 :(得分:2)

Route::resource('test', 'testController'); 

将适用于控制器的RESTful方法,如索引,编辑,销毁,创建,现在您正在使用控制器的自定义方法,您需要创建另一个路径

 Route::post("test/loginform",'testController@dologin');
希望这对你有用。阅读路线文件http://laravel.com/docs/routing

答案 2 :(得分:1)

除了umefarooq所说的,这是100%准确的。您还需要查看Flash消息。

public function dologin(){
    //do login verification stuff
    If login validated
    Return redirect::to(logged/page)->with('message', 'You're logged in');

    If login failed
    Return redirect::to('test')->with('message', 'You login credentials fail');

}

进一步研究: http://laravel.com/docs/responses