Laravel中的控制器方法

时间:2014-10-05 13:55:10

标签: php codeigniter laravel laravel-4 laravel-routing

我正在开发codeigniter应用程序最近2年,因为我从codeigniter本身开始我的mvc模式样式,现在我不是一个沉重的命令行用户,所以起初我确实有一些学习曲线与codeigniter但我越过它开始使用代码点火器开发应用程序,因为我们不需要配置很多,所有内容都在一个zip文件中,但现在不幸的是,codeigniter已经死了,我只是我团队中的一个人,我必须依赖它在其他第三方工具上受到其他人的信任,所以我决定切换到laravel,现在开始时很难从codeigniter迁移,因为作曲家和其他所有东西,但不知何故我也越过了,但是我是现在与路由和其他东西混淆了我已经尝试了很多教程但是我仍然无法看到我如何从我管理学生的应用程序迁移,他们可以在哪里更改电子邮件,更换手机数字更新的东西,在codeigniter它很容易,但我不知道如何在laravel的路由中提出这个问题,现在这个问题对于已经在laravel工作的社区来说听起来很愚蠢但是如果从我的观点来看它会影响我的面包和黄油。这就是我在codeigniter中使用的方法

class Student extends CI_Controller{
    // usual piece of code of constructor
    function update_email()
    {
          // piece of code to update email
    }
}

但是现在使用laravel路由系统并且我不知道如何处理这个资源控制器看起来像这样

<?php

class StudentController extends \BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {

    }


    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        //
    }


    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store()
    {
        //
    }


    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        //
    }


    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function edit($id)
    {
        //
    }


    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function update($id)
    {
        //
    }


    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function destroy($id)
    {
        //
    }


}

现在每个部分都没问题,但我怎样才能处理我只更新电子邮件地址或仅更新电话号码和内容的事情

2 个答案:

答案 0 :(得分:0)

您在这里创建(或者可能生成)的内容称为Restful controller。这是一些标准的方式&#39;管理CRUD操作(创建/读取/更新/删除)。但是没有必要这样做。您可以在控制器中添加所需的任何方法,而根本不使用Restful控制器。这是你的选择。

您可以在函数中创建新方法

function updateEmail() 
{
   // do here whatever you want
}

并在routes.php文件中添加新路线:

Route::match(array('GET', 'POST'), '/changegemail', 'StudentController@updateEmail');

现在您可以编写此方法的代码,它将起作用。

答案 1 :(得分:0)

实际上,在您的问题中,您有一个RESTful控制器,此时您可能会感到困惑,因为您不熟悉Laravel并使用CI,所以可能您非常如此很多用于自动URL映射而没有路由。在这种情况下,为了方便起见,我建议您使用普通控制器,这与您在CI中所做的几乎完全相同,但在Laravel中,您必须声明route对于每一个动作。所以,只需创建两个这样的路线:

Rouite::get('something/edit/{id}', array('uses' => 'StudentController@edit', 'as' => 'edit.record'));

Rouite::post('something/update/{id}', array('uses' => 'StudentController@update', 'as' => 'update.record'));

然后创建一个类/ Controller并声明这些方法:

class StudentController extends baseController {

    // URL: http://example.com/something/edit/10 and it'll listen to GET request
    public function edit($id) {
        // $record = Load the record from database using the $id/10
        // retuen View::make('editform')->with('record', $record);
    }

    // URL: http://example.com/something/update/10  and it'll listen to POST request
    public function update($id) {
        // Update the record using the $id/10
    }
}

在您的表单中,您需要将http://example.com/something/update/10用作action,然后您可以使用route('update.record')url('something/update/10')在表单中生成action。详细了解Laravel Documentation