Reputation: 46
for my WebPanel i created a libary, i can install it via composer without problems but when i want to implement my interface called View i got the following error message:
`2017/06/22 16:00:22 [error] 23179#23179: *120 FastCGI sent in stderr: "PHP
message: PHP Fatal error: Interface '\WebLib\View' not
found in /var/www/site/app/view/DashboardView.php on line 10" while reading
response header from upstream, client: 88.xx.xxx.xxx, server:
xxxxxx.xxxxxx.xxxxx, request: "GET /dashboard HTTP/1.1", upstream:
"fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "xxxxxx.xxxxxx.xxxxx"`
Composer.json of the Libary:
`{
"name": "/weblib",
"description": "WebLib",
"license": "MIT",
"authors": [
{
"name": "XXXXX",
"email": "XXXXXX"
}
],
"minimum-stability": "stable",
"require": {
"php": ">=7.0.0"
},
"autoload": {
"psr-0": {
"XXXXXXXX\\WebLib\\": "src/"
}
}
}`
Folder Tree of the libary:
View.php of the libary:
`<?php
namespace XXXXXXXXXXX\WebLib;
interface View{
public function getTitle():string;
public function getCSSPlugins():string;
public function getJsHeadScripts():string;
public function getContent():string;
public function getJSPlugins():string;
public function getActiveHeader():string;
public function getPluginInitialization():string;
public function getGoogleAnalytics():string;
public function getHeaderKey():string;
public function getFooter():string;
public function getPageHeader():string;
}`
DasbordView.php Implementation in the WebPanel:
require_once ($_SERVER["P_PATH"]."vendor/autoload.php");
class DashboardView implements XXXXXXXXXXXXXXXX\WebLib\View
{
public function getTitle():string{
return "Dashboard";
}
public function getCSSPlugins():string{
$str = '<link rel="stylesheet" href="'.$_SERVER['P_PATH'].'assets/globals/css/plugins.css">';
return $str;
}
public function getPageHeader():string{
return "Dashboard";
}
public function getJsHeadScripts():string{
return "";
}
public function getContent():string{
// TODO: Implement getContent() method.
}
public function getJSPlugins():string{
$str = '<script src="'.$_SERVER['P_PATH'].'assets/admin1/js/layout.js"></script>';
return $str;
}
public function getActiveHeader():string{
return "Dashboard";
}
public function getPluginInitialization():string{
$str = "<script>
$(document).ready(function () {
Layout.init();
});
</script>";
return $str;
}
public function getGoogleAnalytics():string{
$str = "";
return $str;
}
public function getHeaderKey():string{
return "Dashboard";
}
public function getFooter():string{
$str = '';
return $str;
}}
` Thank you for your help in advance.
Upvotes: 1
Views: 850
Reputation: 9582
Adjust the autoloading configuration in composer.json
to use PSR-4 instead of PSR-0 (as already suggested in the comments):
{
"name": "raphaelscheinkoenig/weblib",
"description": "WebLib",
"license": "MIT",
"authors": [
{
"name": "Raphael Scheinkoenig",
"email": "[email protected]"
}
],
"minimum-stability": "stable",
"require": {
"php": ">=7.0.0"
},
"autoload": {
"psr-4": {
"RaphaelScheinkoenig\\WebLib\\": "src/"
}
}
}
For reference, see
Upvotes: 0
Reputation: 2794
For psr-0
, you should put RaphaelScheinkoenig\WebLib\View
(View.php) into src/RaphaelScheinkoenig/WebLib
folder.
Fyi, psr-0
has been marked as deprecated. So, just use psr-4
. And if you use psr-4
you don't need to make src/RaphaelScheinkoenig/WebLib
folder.
Upvotes: 1