我正在尝试学习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
答案 0 :(得分:6)
umefarooq的回答是正确的,但希望这个答案可以让您更深入地了解如何在Laravel开发中获得先机,以及一致的最佳实践编程风格。
首先,类名应该以大写字母开头。尝试保持方法/函数名称以小写字母开头,类名以大写字母开头。
其次,您不需要BaseController前面的\
。如果您是控制器的名称间距,则只需要反斜杠。例如如果您的控制器位于文件夹Admin\TestController.php
中,并通过在文件开头键入Admin
将TestController放在<?php namespace Admin
命名空间中。这是你应该使用\BaseController
的时候,因为你告诉你的TestController从全局命名空间扩展BaseController。或者,在您宣布课程之前,您可以输入use BaseController;
,而不必每次都放置\
。
与您的问题特别相关:
在路径文件中使用资源路由时,您告诉Laravel控制器可以使用以下任何或所有方法:index
,show
,create
,{{ 1}},store
,edit
和update
。
因此,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。使用它们来创建资源,控制器,视图等,并查看生成器如何为您构建模型,视图和控制器。
这是帮助您入门的另一个资源:
答案 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');
}