CentOS 3.10.0-327.36.3.el7.x86_64, PHP 7.0.12
.
public function render($html, $input) { $view = new ViewModel($input); $view->setTemplate($html); $viewRenderer = $this->getServiceLocator()->get('ViewRenderer'); return $viewRenderer->render($view); }
В OLD PHP и OLD CentOS работает, но когда я перешел на новый сервер, это не сработало.
PHP Deprecated: You are retrieving the service locator from within the class Application\\Controller\\MainController. Please be aware that ServiceLocatorAwareInterface is deprecated and will be removed in version 3.0, along with the ServiceLocatorAwareInitializer. You will need to update your class to accept all dependencies at creation, either via constructor arguments or setters, and use a factory to perform the injections. in /home/www/html/xxmanager/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php on line 258, referer: https://xx.xx.com/ 244 /** 245 * Retrieve serviceManager instance 246 * 247 * @return ServiceLocatorInterface 248 */ 249 public function getServiceLocator() 250 { 251 trigger_error(sprintf( 252 'You are retrieving the service locator from within the class %s. Please be aware that ' 253 . 'ServiceLocatorAwareInterface is deprecated and will be removed in version 3.0, along ' 254 . 'with the ServiceLocatorAwareInitializer. You will need to update your class to accept ' 255 . 'all dependencies at creation, either via constructor arguments or setters, and use ' 256 . 'a factory to perform the injections.', 257 get_class($this) 258 ), E_USER_DEPRECATED); 259 260 return $this->serviceLocator; 261 }
РЕДАКТИРОВАТЬ:
Шаг 1: удалите НОВЫЙ
$ echo '' > composer.lock
Шаг 2: ВСТАВЬТЕ СТАРЫЙ к composer.lock
{ "hash": "3d8fc311b085e1e9bc4ed181947f205d", "packages": [ { "package": "zendframework/zendframework", "version": "2.0.3" } ], "packages-dev": null, "aliases": [ ], "minimum-stability": "stable", "stability-flags": [ ] }
Шаг 3: Удалите НОВЫЙ поставщик
$ rm -fr vendor
Шаг 4: попытайтесь установить и не выполнить
$ ./composer.phar install [RuntimeException] Your composer.lock was created before 2012-09-15, and is not supported anymore. Run "composer update" to generate a new one. install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--] [<packages>]...
EDIT 2:
# cat composer.json { "name": "zendframework/skeleton-application", "description": "Skeleton Application for ZF2", "license": "BSD-3-Clause", "keywords": [ "framework", "zf2" ], "homepage": "http://framework.zend.com/", "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.2.10" } } # php composer.phar install Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 2 installs, 0 updates, 0 removals - Installing zendframework/zendxml (1.0.2): Loading from cache - Installing zendframework/zendframework (2.2.10): Downloading (100%) zendframework/zendframework suggests installing doctrine/annotations (Doctrine Annotations >=1.0 for annotation features) zendframework/zendframework suggests installing ext-intl (ext/intl for i18n features (included in default builds of PHP)) zendframework/zendframework suggests installing ircmaxell/random-lib (Fallback random byte generator for Zend\Math\Rand if OpenSSL/Mcrypt extensions are unavailable) zendframework/zendframework suggests installing ocramius/proxy-manager (ProxyManager to handle lazy initialization of services) zendframework/zendframework suggests installing zendframework/zendpdf (ZendPdf for creating PDF representations of barcodes) zendframework/zendframework suggests installing zendframework/zendservice-recaptcha (ZendService\ReCaptcha for rendering ReCaptchas in Zend\Captcha and/or Zend\Form) Writing lock file Generating autoload files
FAIL: ОШИБКА: PHP Неустранимая ошибка: Непринятая ошибка: вызов неопределенной функции Application \ Controller \ mysql_real_escape_string ()
Похоже, что на новом сервере важно ваше содержимое вашего vendor/
папки. Кажется, что после развертывания вашего программного обеспечения вы устанавливали зависимости с composer update
вместо composer install
или у вас нет файла composer.lock
.
Быстрое исправление должно состоять в том, чтобы просто скопировать файл composer.lock
со старой машины, стереть vendor/
папку на новом и переустановить composer install
которая должна быть затем основана на содержании composer.lock
.
РЕДАКТИРОВАТЬ
Ваш composer.lock был создан до 2012-09-15
Кажется, что ваша OLD-установка действительно старая. Что вы можете сделать, это обновить ваш composer.json
чтобы запросить те же версии, что и у старой системы. Это довольно просто, и все, что вам нужно сделать, это посмотреть, что вы получили в OLD-системе и сделать новый запрос тем же.
Поэтому список установленных версий с composer show
:
$ composer show foo/bar 1.4.3 Some description ....
Затем отредактируйте composer.json
в новой системе и обновите все ограничения версии, чтобы указать на ту же версию. Т.е. вместо
'require': { 'foo/bar': '~1.0', ... }
вам нужно поставить версию, показанную composer show
для этого foo/bar
:
'require': { 'foo/bar': '1.4.3', ... }
Затем удалите composer.lock
и vendor/
и создайте composer install
и вы должны быть хорошими.