提问者:小点点

在laravel 4中未调用控制器方法


我正在努力学习拉威尔4。我创建了一个表单(使用视图),并使用index方法通过控制器(testController)返回它。我使用artisan命令创建了此控制器。

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

这是路线:

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() }}

提交表单后,它应该在浏览器中呼应“工作”。但提交表格后,页面为空白。url虽然从

/laravel/公共/索引。php/测试/

/laravel/公共/索引。php/test/loginform


共3个答案

匿名用户

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

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

其次,在BaseController前面不需要\。只有在为控制器命名时才需要反斜杠。e、 g.如果您的控制器位于文件夹Admin\TestController中。php,然后通过键入

具体与您的问题相关:

当您在路由文件中使用资源路由时,您正在告诉Laravel控制器可以使用以下任何或所有方法:索引显示创建存储编辑更新销毁

因此,Route::resource('test','TestController')将指向TestController。php在您的控制器文件夹中。

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

<?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');
  }
}

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

在终端窗口中,键入php工匠路由

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

test.index
test.destroy
test.show
test.edit
test.destroy
test.create
test.update

所以在你的身体里,不是做

{{Form::open(数组('url'=

{{ Form::open(array('route' => array('test.store')) }}

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

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

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

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

匿名用户

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

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

 Route::post("test/loginform",'testController@dologin');

希望这对你有用。阅读路线文档http://laravel.com/docs/routing

匿名用户

除了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