2 回答
TA贡献1839条经验 获得超15个赞
为了达到您的目的,您应该使用 Helper 而不是 Middleware。根据 Laravel 文档
中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。
您可以如下创建自定义 Helper 并在您的应用中的任何位置使用它
第 1 步:创建您的 Currency Helpers 类文件并为其提供匹配的命名空间。编写你的类和方法:
<?php // Code within app\Helpers\Currency.php
namespace App\Helpers;
class Currency
{
public static function convert($request, Closure $next)
{
$sub=array_shift((explode('.', $_SERVER['HTTP_HOST'])));
$fromCurrency = "AED";
$toCurrency = "$sub";
$amount = "1";
$url = "https://www.google.com/search?q=".$fromCurrency."+to+".$toCurrency;
$get = file_get_contents($url);
$data = preg_split('/\D\s(.*?)\s=\s/',$get);
$exhangeRate = (float) substr($data[1],0,7);
$convertedAmount = $amount*$exhangeRate;
$data = array( 'exhangeRate' => $exhangeRate, 'convertedAmount' =>$convertedAmount, 'fromCurrency' => strtoupper($fromCurrency), 'toCurrency' => strtoupper($toCurrency));
return json_encode( $data );
}
}
第 2 步:创建别名:
<?php // Code within config/app.php
'aliases' => [
...
'Currency' => App\Helpers\Helper::class,
...
第三步:composer dump-autoload在项目根目录下运行
第 4 步:在控制器中像这样使用它
<?php
namespace App\Http\Controllers;
use Currency;
class SomeController extends Controller
{
public function __construct()
{
Currency::convert($value);
}
TA贡献1998条经验 获得超6个赞
我不认为中间件是实现您想要的功能的最佳方式,但要使用中间件执行您要求的操作,中间件本身必须有一个名为handle而不是convert. 您也可以将结果闪存到您的会话中以在控制器内部访问它。
还要注意句柄函数的返回,因为它是进程继续所必需的
namespace App\Http\Middleware;
use Closure;
class Currency
{
public function handle($request, Closure $next)
{
$explodedArr = explode('.', $_SERVER['HTTP_HOST']);
$sub = array_shift($explodedArr);
$fromCurrency = "AED";
$toCurrency = "$sub";
$amount = "1";
$url = "https://www.google.com/search?q=".$fromCurrency."+to+".$toCurrency;
$get = file_get_contents($url);
$data = preg_split('/\D\s(.*?)\s=\s/',$get);
$exhangeRate = (float) substr($data[1],0,7);
$convertedAmount = $amount*$exhangeRate;
$data = array( 'exhangeRate' => $exhangeRate, 'convertedAmount' =>$convertedAmount, 'fromCurrency' => strtoupper($fromCurrency), 'toCurrency' => strtoupper($toCurrency));
session()->flash('convert_result', json_encode($data) );
return $next($request);
}
}
// and you should be able to get the result in your controller like so
session('convert_result');
- 2 回答
- 0 关注
- 137 浏览
添加回答
举报