用Laravel-5.1格式重写纯PHP代码

时间:2016-01-08 10:53:31

标签: php arrays json html5 bootstrap-typeahead

有关如何转换此Laravel-5.1代码的任何想法。我有这个代码在纯PHP中运行,我想在Laravel中编写它,因为我正在使用Laravel进行开发。将我指向已经完成此操作或提供代码片段的教程将非常受欢迎。

<?php
    if(isset($_POST['query'])){

        mysql_connect('localhost', 'root', '');
        mysql_select_db('tradersmart');
        $query = $_POST['query'];
        $sql = mysql_query("SELECT name, timezone_id FROM geonames_names WHERE name LIKE '%{$query}%'");
        $arrayName = array();
        $arrayTimezone = array();
        while($row = mysql_fetch_assoc($sql)){
            $arrayName[] = $row['timezone_id'];
            $arrayTimezone[] = $row['name'];
        }
        echo json_encode($arrayName  +$arrayTimezone);
    }
?>

这是HTML文件:它使用JSon和typeahead来加速建议。

<body>
        <div class="well">
            <input type="text" class="css-input" id="typeahead" data-provider="typeahead">
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
        <script type="text/javascript" src="js/bootstrap.js"></script>

        <script>
            $(function(){
                $('#typeahead').typeahead({
                    source: function(query, process){
                        $.ajax({
                            url: 'http://localhost:2222/bootstrap/source.php',
                            type: 'POST',
                            data: 'query=' +query,
                            dataType: 'JSON',
                            async: true,
                            success: function(data){
                                process(data);
                            }
                        });
                    }
                });
            });
        </script>
    </body>

1 个答案:

答案 0 :(得分:1)

好吧,既然你要求Laravel做事的方式,那么完成这项工作将会有很少的步骤。简而言之,您需要1)创建模型,2)更新您的routes.php文件,3)创建控制器,以及(4)更新您的ajax调用以反映Laravel的路由约定。我建议使用命令行php artisan命令来创建模型和控制器,因为它们会将必要的文件放在正确的路径中,以便Laravel为您自动加载它们。

  1. 模型 - 从命令行运行php artisan make:model GeoName,这应该在app/GeoName.php创建一个模型,您需要在其中更改表名以反映您的客户名称。

    <? namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class GeoName extends Model
    {
    
    // this will map your custom table name to laravel. 
    protected $table = "geonames_names"; 
    
    }
    

    Laravel会自动希望tablename为模型的复数版本,在这种情况下它会查找geonames,以覆盖您需要添加上面的protected $table属性。< / p>

  2. 更新app/Http/routes.php文件以捕获AJAX帖子请求。

    Route::post('bootstrap/source','GeoNameController@ajaxQuery');

    这会向POST发送http://localhost:2222/bootstrap/cache个请求,此处Laravel Documents on routes还有更多请求。

  3. 在命令行中使用php artisan make:Controller GeoNameController --plain创建控制器。此处使用Plain来停止典型CRUD请求类型的索引,创建,编辑,显示,更新和删除的自动脚手架。这将创建文件app/Http/Controllers/GeoNameController.php

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    
    class GeoNameControler extends Controller
    {
         // Add the following here
    
         public function ajaxQuery(Request $request){
    
             $query = $request->get('query');
    
             $geoNames = GeoName::where('name',$query)->lists('name','timezone_id')->get();
    
             return $geoNames;
         }
    }
    

    请记住query中使用了$query = $request->get('query');,因为这是您在ajax请求中命名数据变量的内容。 (data: 'query=' +query,

  4. 最后,在您的jQuery ajax请求中删除请求调用中的.phpurl: 'http://localhost:2222/bootstrap/source'因为您永远不会直接调用Laravel中的文件,所以路径文件会处理您应用程序的所有目标。

  5. 需要注意的一些事项,(1)您的数据库应使用.env and app/config.php文件进行配置,(2)Laravel将自动检测到jQuery ajax函数是否期望JSON响应,因此Laravel将提供它要求的确切内容。

    您可能会遇到XSFR令牌权限问题,您可以在此处阅读有关如何解决Laravel Docs的问题。如果您还不知道,Laravel's Master Documentation非常好!

    当然,要了解使用Laravel和许多优秀的Laravel资源,还有很多东西需要学习。祝你好运!