Задать вопрос
@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-ера
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Чебуратор тега РНР
Надо обновить версию этой фасоли.
Автор там что-то колупал в своем древнем коде, чтобы сделать поддержку неймспейсов. Не знаю насколько удачно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽