【问题标题】:Calling CakePHP v3 Controller Function From Custom External PHP File从自定义外部 PHP 文件调用 CakePHP v3 控制器函数
【发布时间】:2019-12-11 16:58:26
【问题描述】:

我有使用 cakephp 版本 3 的应用程序。 如何从自定义 php 文件中调用函数。

假设我有一个自定义的 php 文件 test.php。我想从控制器文件 UrlController.php 中调用 cakephp 函数。

test.php

<?php
error_reporting(E_ALL);
include 'path/to/UrlController.php';
echo json_decode(GetUrl());

UrlController.php

<?php

namespace App\Controller;

use App\Controller\URLController;
use Cake\Event\Event;
use Cake\I18n\Time;
use Cake\Network\Exception\NotFoundException;
use Cake\ORM\TableRegistry;

class LinksController extends URLController
{
    public function GetUrl()
    {
        $link = $this->Links->newEntity();
        $data = [];
        $link = $this->Links->patchEntity($link, $data);
        if ($this->Links->save($link)) {
            $content = [
                'status' => '200',
                'message' => 'success',
                'url' => 'https://google.com'
            ];
            $this->response->body(json_encode($content));
            return $this->response;
        }
    }
}

当尝试包含应用程序 index.php 和 bootstrap.php 时,它仍然无法正常工作。

已根据@Salines 回答编辑了 test.php,但仍无法正常工作

<?php
namespace App\test;
error_reporting(E_ALL);

use App\Controller\URLController;

class Test extends URLController
{
   public function custom()
   {
     $this->getUrl(); // call function from UrlController 
   }
}

错误:“PHP 致命错误:在第 7 行的 /../public_html/test/test.php 中找不到类 'App\Controller\URLController'”

我的测试文件位于 /absolute/path/public_html/test/test.php,我应该在命名空间中放什么?

【问题讨论】:

  • require_once(ROOT . 'src' . DS . 'Controller' . DS . 'UrlController'); $LinksControllerObj = new LinksController();
  • 一开始你为什么要这么做?你的问题有点像XY problem
  • @ndm 这是我的实际问题,不是 XY 问题。
  • 好吧,恕我直言,大多数人在面对可能的 XY 问题时都会这么说 :) 看,您想直接从非 CakePHP 应用程序 PHP 调用控制器脚本,而您无法这样做,那是 a 问题,您在这里提出的问题,但我怀疑这实际上是您的 解决方案 (一个不合适的)到一个潜在的问题(无论你的非 CakePHP 脚本是做什么/解决的),你应该详细说明。
  • 为了让我自己清楚,尝试从 CakePHP 应用程序外部包含一个控制器是错误的做法(即使你让它工作),无论你试图通过做什么来解决那个。

标签: php function cakephp server-side-includes


【解决方案1】:

与使用链接控制器的方式相同

test.php

<?php

namespace App\path_to_folder_where_is_your_test_php;

use App\Controller\URLController;

class Test extends UrlController
{
   pubic function custom()
   {
     $this->getUrl(); // call function from UrlController 
   }

或者在没有类的 PHP 中

$newUrl = new \App\Controller\URLController();
$result = $newUrl->getUrl();

但是,您不遵守 MVC 标准

【讨论】:

  • 嗨,我仍然无法使这个工作。收到此错误“PHP 致命错误:在第 7 行的 /../public_html/test/test.php 中找不到类 'App\Controller\URLController'”。我的测试文件位于 /absolute/path/public_html/test/test.php,我应该在命名空间中放什么?我在问题中添加了 test.php 代码。
  • 您的 test.php 不在 App 文件夹中?然后你必须在作曲家中添加从其他目的地自动加载的路径。 /test/test.php 文件中的命名空间:命名空间 Test;
  • 你能告诉我更多怎么做吗?
  • 是的,getcomposer.org/doc/04-schema.md#psr-0。但是自定义 php 脚本的理想位置是在 cakephp webroot 文件夹中
猜你喜欢
  • 2013-11-28
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2012-07-06
  • 2014-05-06
  • 2016-11-09
相关资源
最近更新 更多