Задать вопрос
@ravshan01

Как использовать RedBeanPHP внутри namespace в php?

Всем привет.
Решил переписать с использованием namespace, вышла проблема.
Как использовать RedBeanPHP внутри namespace, если он подключен через require.

Структура
/Controllers
  RootController.php
  GetController.php
  ...

/includes
  /Interfaces
    ControllerInterface.php
  /Traits
    ControllerTrait.php
  db.php

/Libs
  /rb
    rb.php

<b>index.php</b>


index.php
<?php	
	require_once './Includes/db.php';
	require_once './autoload.php';

	use API\Controllers\RootController;


	$request = $_REQUEST['request']; 
	$controller = new RootController();
	$response   = $controller->execute_request($request);
	echo "$response";

?>


RootController подключает другие контроллеры(get, add, edit, delete)
<?php
	namespace API\Controllers;

	require_once $_SERVER['DOCUMENT_ROOT'].'/API/Includes/db.php';
	require_once $_SERVER['DOCUMENT_ROOT'].'/API/autoload.php';

	use API\Includes\Interfaces\ControllerInterface;
	use API\Includes\Traits\ControllerTrait;


	class RootController implements ControllerInterface{
	  use ControllerTrait;
	  // ...
	}
?>


Сейчас проблема возникает при попытке использовать RedBeanPHP(R) в ControllerTrait.
В какое пространство имён попадёт подключаемый RedBeanPHP

// ControllerTrait
	namespace API\Includes\Traits;
	

	trait ControllerTrait{
		private $dependences = [];
		private $objects = [];



		private function set_dependences(){
			$this->dependences = R::findAll('dependences');
		}
		private function get_dependences($json = true){
			if ( count($this->dependences) === 0 ) $this->set_dependences();
		
			return $json ? json_encode($this->dependences) : $this->dependences;
		}



		private function set_objects(){

			foreach ( $this->get_dependences($json = false) as $value ) {
				$this->objects[ $value->id ] = R::findAll($value->type.'s');
			}

		}
		private function get_objects($json = true){
			if ( count($this->objects) === 0 ) $this->set_objects();

			return $json ? json_encode($this->objects) : $this->objects;
		}

	}


Пробовал использовать \R::findAll(), но php не распознаёт и пытается подключить файл(Model_Dependences) с использованием autoload-ера
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@ravshan01 Автор вопроса
Проблема была в том что при использование \R PHP почему-то в autoload функцию отдавал следующее значение 'Model_TableName'', где TableName название таблицы к которой обращаюсь.

Решил просто изменив свою autoload функцию
spl_autoload_register( function($className){
		if ( strpos($className, 'Model') !== false ) return false; // иначе при использование \R, пытается загрузить 'Model_TableName'

		$className = str_replace('\\', '/', $className);
		require_once $_SERVER['DOCUMENT_ROOT'].'/'.$className.'.php';
	})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Надо обновить версию этой фасоли.
Автор там что-то колупал в своем древнем коде, чтобы сделать поддержку неймспейсов. Не знаю насколько удачно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы