簡體   English   中英

如何從 laravel 上的 php 文件調用 controller

[英]How to call controller from .php file on laravel

I have name is Bildirim_Islemleri.php php file on laravel public directory.I need call Controller in this php file.And return cath error to insert log table.How can ı do this?Do you have any ideas?

我共享目錄結構和代碼。我最后從 function OdemeBildir controller 目錄結構嘗試這個過程

php文件結構

在此處輸入圖像描述

<?php
/**
 *
 */

class Bildirim_Islemleri
{
  // use App\Http\Controllers\MailController;
  function __construct() {
    $yol = "../config/DBConfig.php";
    require_once( $yol );


  }
  public function OdemeBildir($post)
  {
    $dbConfig=new DBConfig();
    $baglanti = new PDO("mysql:host=".$dbConfig->host.";dbname=".$dbConfig->dbname, $dbConfig->dbuser, $dbConfig->password);
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $siparis_kodu=$post["merchant_oid"];
    $sepetGetirSql = "select * from sepetler where siparis_kodu='".$siparis_kodu."'";
    //
    $sepetler = array();


  $queryResultSepetList = $baglanti->query( $sepetGetirSql, PDO::FETCH_ASSOC );
  if ( $queryResultSepetList->rowCount() > 0 ) {
      foreach ( $queryResultSepetList as $row ) {
          array_push( $sepetler, $row );
        }
      }


$uye_id="";
for ($i=0; $i <count($sepetler) ; $i++) {
  $statement = $baglanti->prepare("SELECT urun_adi,urun_fiyati FROM urunler WHERE urun_id = :urun_id");
  $statement->execute(array( ":urun_id" => $sepetler[$i]["urun_id"] ));
  $urun_bilgileri = $statement->fetch(PDO::FETCH_ASSOC);


  $prepare = $baglanti->prepare("INSERT INTO siparisler SET urun_id = :urun_id,miktar=:miktar,urun_fiyati=:urun_fiyati,siparis_kodu=:siparis_kodu,kargo_takip_no=:kargo_takip_no,odeme_durumu=:odeme_durumu,uye_id=:uye_id");

  $veriler = [
      "urun_id" =>  $sepetler[$i]["urun_id"],
      "miktar" =>  $sepetler[$i]["miktar"],
      "urun_fiyati" =>  $urun_bilgileri["urun_fiyati"],
      "siparis_kodu" =>  $sepetler[$i]["siparis_kodu"],
      "kargo_takip_no" =>  "",
      "odeme_durumu" => 1,
      "uye_id" => $sepetler[$i]["uye_id"]
  ];
  $uye_id=$sepetler[$i]["uye_id"];
  // verileri çalıştır
  $prepare->execute($veriler);


    }
    // $sepet_sil=$baglanti->prepare("DELETE FROM sepetler WHERE siparis_kodu=:siparis_kodu");
    // $sepet_sil->bindParam(":siparis_kodu",$siparis_kodu,PDO::PARAM_STR);
    // $sepet_sil->execute();
    try {
    App\Http\Controllers\MailController::siparisiniz_alindi_mail_gonder("emrahcaliskan33@outlook.com", "Emrah Çalışkan",$siparis_kodu);
    } catch (Error  $e) {
      $this->HataLogKaydet($uye_id,$siparis_kodu,$e->getMessage());
    }



  }
  public function HataLogKaydet($uye_id,$siparis_kodu,$hata_log)
  {

    $dbConfig=new DBConfig();
    $baglanti = new PDO("mysql:host=".$dbConfig->host.";dbname=".$dbConfig->dbname, $dbConfig->dbuser, $dbConfig->password);
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $prepare = $baglanti->prepare("INSERT INTO hata_loglari SET uye_id = :uye_id,siparis_kodu=:siparis_kodu,hata_log=:hata_log");

    $veriler = [
        "uye_id" =>  $uye_id,
        "siparis_kodu" =>  $siparis_kodu,
        "hata_log" =>  $hata_log
    ];
    // verileri çalıştır
    $prepare->execute($veriler);
  }
}

 ?>

由於您只調用 controller 文件,因此 Laravel 的核心和其他庫將丟失。

1 - 您可以將 Bildirim_Islemleri 文件作為 OdemeBildirController.php 移動到 App\Http\Controller 文件夾並在 web.ZE1BFD762321E409CEE4AC0B6E849 上定義路線

Route::post('odeme/odeme-bildir', [App\Http\Controllers\OdemeBildirController::class, 'OdemeBildir']);

這將為您的 OdemeBildir function 提供一條路線。

2 - 如果您不想將文件與 Laravel 一起使用,那么您可以通過隊列與 Laravel 進行通信。 https://laravel.com/docs/8.x/queues

Queue 讓您可以在后台執行作業。 您創建作業,並且工作人員按順序在后台處理它們。 您可以使用將隊列存儲在 DB、Redis 或 Amazon SQS 中。 這取決於你,但在這種情況下 DB 就足夠了。 您將在作業表中添加一行,而不是調用 MailController::siparisiniz_alindi_mail_gonder function。 這將存儲有關您的工作的信息。 然后,您需要與工作人員一起處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM