массивы — переписать чистый код PHP в формате Laravel-5.1

любые идеи о том, как конвертировать этот код 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

Решение

Ну, так как вы спрашиваете о способе 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 автоматически ожидает, что имя таблицы будет множественной версией модели, в этом случае она будет искать geonames, чтобы переопределить что вам нужно будет добавить protected $table атрибут выше.

  2. Обновите app/Http/routes.php файл для перехвата AJAX-запроса.

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

    Это поймает POST запросить http://localhost:2222/bootstrap/cacheесть еще в Laravel Документы на маршрутах Вот.

  3. Создать контроллер с помощью php artisan make:Controller GeoNameController --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 удалите .php в запросе звоните. url: 'http://localhost:2222/bootstrap/source' так как вы никогда не будете напрямую вызывать файлы в Laravel, файлы маршрутов обрабатывают все пункты назначения для вашего приложения.

Несколько замечаний: (1) Ваша база данных должна быть настроена с использованием .env and app/config.php files, (2) Laravel автоматически обнаружит, что ajax-функция jQuery ожидает ответ JSON, поэтому Laravel предоставит именно то, что запрашивает.

Вероятно, у вас возникнет проблема с разрешением токена XSFR, о которой вы можете прочитать в разделе Laravel Docs Вот. Если вы еще не знаете, Основная документация Ларавела отлично!

Конечно, есть много чего узнать об использовании Laravel и много отличных ресурсов Laravel. Удачи!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]