有关如何转换此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>
答案 0 :(得分:1)
好吧,既然你要求Laravel做事的方式,那么完成这项工作将会有很少的步骤。简而言之,您需要1)创建模型,2)更新您的routes.php
文件,3)创建控制器,以及(4)更新您的ajax调用以反映Laravel的路由约定。我建议使用命令行php artisan
命令来创建模型和控制器,因为它们会将必要的文件放在正确的路径中,以便Laravel为您自动加载它们。
模型 - 从命令行运行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>
更新app/Http/routes.php
文件以捕获AJAX帖子请求。
Route::post('bootstrap/source','GeoNameController@ajaxQuery');
这会向POST
发送http://localhost:2222/bootstrap/cache
个请求,此处Laravel Documents on routes还有更多请求。
在命令行中使用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,
)
最后,在您的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资源,还有很多东西需要学习。祝你好运!