【问题标题】:Re-write pure PHP code in Laravel-5.1 format以 Laravel-5.1 格式重写纯 PHP 代码
【发布时间】:2016-04-13 00:46:06
【问题描述】:

关于如何转换此 Laravel-5.1 代码的任何想法。我有这段代码在纯 PHP 中运行,我想用 Laravel 编写它,因为我使用 Laravel 进行开发。向我指出已经完成此操作的教程或提供代码 sn-p 将不胜感激。

<?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>

【问题讨论】:

  • 既然你已经在使用 Laravel 进行开发,它应该很简单:创建新的控制器来处理请求,创建 geonames_names 模型来从数据库中获取数据,返回 JSON 响应。您正在为哪些问题苦苦挣扎?
  • stackoverflow.com/questions/34679066/… @Alex Blex 我已经尝试了实现,但它没有运行。拜托,我已经在上面发布了我的实现链接。虽然返回了 json,但我认为它的 typeahead 不起作用。

标签: php arrays json html bootstrap-typeahead


【解决方案1】:

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

  1. Model - 从命令行运行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 会自动期望表名是模型的复数版本,在这种情况下,它会查找 geonames,以覆盖您需要在上面添加 protected $table 属性。

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

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

    这将捕获到http://localhost:2222/bootstrap/cache 的POST 请求,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-&gt;get('query');,因为这是您在 ajax 请求中命名数据变量的名称。 (data: 'query=' +query,)

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

注意几点,(1) 你的数据库应该使用.env and app/config.php 文件配置,(2) Laravel 会自动检测到 jQuery ajax 函数期待一个 JSON 响应,所以 Laravel 会准确地提供什么它要求。

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

当然,还有很多关于使用 Laravel 和许多优秀的 Laravel 资源的知识。祝你好运!

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2016-02-18
    • 2021-10-30
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2016-07-27
    相关资源
    最近更新 更多