Где создавать контроллеры и модули для для консольного запуска

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

Здравствуйте . Борюсь все с websocket. Читаю стаю и пытаюсь сделать тоже самое. Не получается никак так как не понимаю куда эти файлы все деть. Написано что в консоле но ведь это же системная папка и как бы туда нельзя ничего класть . А как тогда ? Подскажите как это с консолным запуском все делается. Спасибо заранее

http://satirics.net/wp/2015/09/22/%D1%8 ... 0%B2-yii2/
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

Никто не сталкивался с этим?
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение dmg »

evgeniy123 писал(а):Написано что в консоле но ведь это же системная папка и как бы туда нельзя ничего класть .
Поясните.
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

У меня basic. Домой приеду попробую так
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

jakiro писал(а):Не оно https://yadi.sk/d/aKlG4MFtu4fny ?

сделал папку console. В ней создал components i controllers

console.php

Код: Выделить всё

 'controllerMap' => [
        'websocket' => 'morozovsk\yii2-websocket\console\controllers\WebsocketController',
        'socket' => '@app/console/controllers/SocketController'
    ],

    'components' => [


        'SocketServer' => [
            'class' => '@app/console/components/SocketServer'
        ],

 

вот что происходит в консоли:

Код: Выделить всё

./yii socket/start-socket
Exception 'ReflectionException' with message 'Class @app\console\controllers\SocketController does not exist'

in /var/www/vendor/yiisoft/yii2/di/Container.php:422

Stack trace:
#0 /var/www/vendor/yiisoft/yii2/di/Container.php(422): ReflectionClass->__construct('@app\\console\\co...')
#1 /var/www/vendor/yiisoft/yii2/di/Container.php(362): yii\di\Container->getDependencies('@app\\console\\co...')
#2 /var/www/vendor/yiisoft/yii2/di/Container.php(154): yii\di\Container->build('@app\\console\\co...', Array, Array)
#3 /var/www/vendor/yiisoft/yii2/BaseYii.php(340): yii\di\Container->get('@app\\console\\co...', Array)
#4 /var/www/vendor/yiisoft/yii2/base/Module.php(507): yii\BaseYii::createObject('@app\\console\\co...', Array)
#5 /var/www/vendor/yiisoft/yii2/base/Module.php(448): yii\base\Module->createController('socket/start-so...')
#6 /var/www/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('socket/start-so...', Array)
#7 /var/www/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('socket/start-so...', Array)
#8 /var/www/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#9 /var/www/yii(20): yii\base\Application->run()
#10 {main}

 
Не скажите почему не проходит путь или алиас ?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение maleks »

Это вы так класс указываете?:

Код: Выделить всё

'@app/console/controllers/SocketController' 
Поменяйте на:

Код: Выделить всё

'app\\console\\controllers\\SocketController' 
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

maleks писал(а):Это вы так класс указываете?:

Код: Выделить всё

'@app/console/controllers/SocketController'
Поменяйте на:

Код: Выделить всё

'app\\console\\controllers\\SocketController'
К сожалению не работал YII2. Понять не могу чего ему не хватает. Всё же делаю правильно как написано. может какие то изменения в YII2 были ?

Код: Выделить всё

# php yii socket/start-socket
<?
namespace console\controllers;


use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use console\components\SocketServer; //не забудьте поменять, если отличается

class SocketController extends  \yii\console\Controller
{
public function actionStartSocket($port=8080)
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new SocketServer()
)
),
$port
);
$server->run();
}
}Exception 'yii\base\UnknownClassException' with message 'Unable to find 'app\console\controllers\SocketController' in file: /var/www/console/controllers/SocketController.php. Namespace missing?'

in /var/www/vendor/yiisoft/yii2/BaseYii.php:291

Stack trace:
#0 [internal function]: yii\BaseYii::autoload('app\\console\\con...')
#1 [internal function]: spl_autoload_call('app\\console\\con...')
#2 /var/www/vendor/yiisoft/yii2/di/Container.php(422): ReflectionClass->__construct('app\\console\\con...')
#3 /var/www/vendor/yiisoft/yii2/di/Container.php(362): yii\di\Container->getDependencies('app\\console\\con...')
#4 /var/www/vendor/yiisoft/yii2/di/Container.php(154): yii\di\Container->build('app\\console\\con...', Array, Array)
#5 /var/www/vendor/yiisoft/yii2/BaseYii.php(340): yii\di\Container->get('app\\console\\con...', Array)
#6 /var/www/vendor/yiisoft/yii2/base/Module.php(507): yii\BaseYii::createObject('app\\console\\con...', Array)
#7 /var/www/vendor/yiisoft/yii2/base/Module.php(448): yii\base\Module->createController('socket/start-so...')
#8 /var/www/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('socket/start-so...', Array)
#9 /var/www/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('socket/start-so...', Array)
#10 /var/www/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#11 /var/www/yii(20): yii\base\Application->run()
#12 {main}
 
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

dmg писал(а):
evgeniy123 писал(а):Написано что в консоле но ведь это же системная папка и как бы туда нельзя ничего класть .
Поясните.

/var/www/vendor/yiisoft/yii2/console/components (controllers)
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение maleks »

namespace console\controllers;
сделал папку console.
ну тогда:
namespace app\console\controllers;

Или в алиасы прописать куда console указывает, начинайте изучать yii2, в доках все есть.
http://www.yiiframework.com/doc-2.0/gui ... iases.html
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

maleks писал(а):
namespace console\controllers;
сделал папку console.
ну тогда:
namespace app\console\controllers;

Или в алиасы прописать куда console указывает, начинайте изучать yii2, в доках все есть.
http://www.yiiframework.com/doc-2.0/gui ... iases.html
Я знаю все но есть моменты которые я совсем не понимаю. Вот сейчас заменил на ваше предложение и снова тоже самое.

Засунул в app/commands

Код: Выделить всё

php yii socket/start-socket
<?
namespace  app\console\controllers;

use yii\console\Controller;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use SocketServer; //не забудьте поменять, если отличается

class SocketController extends  Controller
{
public function actionStartSocket($port=8080)
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new SocketServer()
)
),
$port
);
$server->run();
}
}Exception 'yii\base\UnknownClassException' with message 'Unable to find 'app\commands\SocketController' in file: /var/www/commands/SocketController.php. Namespace missing?'

in /var/www/vendor/yiisoft/yii2/BaseYii.php:291

Stack trace:
#0 [internal function]: yii\BaseYii::autoload('app\\commands\\So...')
#1 [internal function]: spl_autoload_call('app\\commands\\So...')
#2 /var/www/vendor/yiisoft/yii2/base/Module.php(562): class_exists('app\\commands\\So...')
#3 /var/www/vendor/yiisoft/yii2/base/Module.php(520): yii\base\Module->createControllerByID('socket')
#4 /var/www/vendor/yiisoft/yii2/base/Module.php(448): yii\base\Module->createController('socket/start-so...')
#5 /var/www/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('socket/start-so...', Array)
#6 /var/www/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('socket/start-so...', Array)
#7 /var/www/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#8 /var/www/yii(20): yii\base\Application->run()
#9 {main}

Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение maleks »

namespace app\console\controllers;
Засунул в app/commands
:shock:
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

:idea:
maleks писал(а):
namespace app\console\controllers;
Засунул в app/commands
:shock:
Зделал по примеру HelloController
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение rak »

evgeniy123 писал(а)::idea:
maleks писал(а):
namespace app\console\controllers;
Засунул в app/commands
:shock:
Зделал по примеру HelloController
если контроллеры лежат в папке commands, то и неймспейс нужно прописывать app\commands
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

rak писал(а):
evgeniy123 писал(а)::idea:
maleks писал(а):


:shock:
Зделал по примеру HelloController
если контроллеры лежат в папке commands, то и неймспейс нужно прописывать app\commands

все было бы очень просто так :( Пробовал и еще раз сейчас. тоже самое

Код: Выделить всё

php yii socket/start-socket
<?
namespace  app\commands;

use yii\console\Controller;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use SocketServer; //не забудьте поменять, если отличается

class SocketController extends  Controller
{
public function actionStartSocket($port=8080)
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new SocketServer()
)
),
$port
);
$server->run();
}
}Exception 'yii\base\UnknownClassException' with message 'Unable to find 'app\commands\SocketController' in file: /var/www/commands/SocketController.php. Namespace missing?'

in /var/www/vendor/yiisoft/yii2/BaseYii.php:291

Stack trace:
#0 [internal function]: yii\BaseYii::autoload('app\\commands\\So...')
#1 [internal function]: spl_autoload_call('app\\commands\\So...')
#2 /var/www/vendor/yiisoft/yii2/base/Module.php(562): class_exists('app\\commands\\So...')
#3 /var/www/vendor/yiisoft/yii2/base/Module.php(520): yii\base\Module->createControllerByID('socket')
#4 /var/www/vendor/yiisoft/yii2/base/Module.php(448): yii\base\Module->createController('socket/start-so...')
#5 /var/www/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('socket/start-so...', Array)
#6 /var/www/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction('socket/start-so...', Array)
#7 /var/www/vendor/yiisoft/yii2/base/Application.php(375): yii\console\Application->handleRequest(Object(yii\console\Request))
#8 /var/www/yii(20): yii\base\Application->run()
#9 {main}

 
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение rak »

ну так прописать нужно <?php вместо <? :D
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

rak писал(а):ну так прописать нужно <?php вместо <? :D
Вы знаете заработало немного :) К сожалению теперь просит класс который я поместил в папку веб но он не видит к сожалению. Делаю вот так

Код: Выделить всё

<?php
namespace  app\commands;

use yii\console\Controller;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Ratchet\MessageComponentInterface;
use Ratchet\WebSocket;
use SocketServer; //не забудьте поменять, если отличается

class SocketController extends  Controller
{
public function actionStartSocket($port=8080)
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new SocketServer()
)
),
$port
);
$server->run();
}
}
 
и ругается

Код: Выделить всё

php yii socket/start-socket
PHP Fatal error:  Class 'yii\web\SocketServer' not found in /var/www/commands/SocketController.php on line 19
PHP Fatal Error 'yii\base\ErrorException' with message 'Class 'yii\web\SocketServer' not found'

in /var/www/commands/SocketController.php:19

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleFatalError()
#1 {main}

 
phpStorm может найти этот класс . Уже су ю куда могу и прописываю пути use. Всегда ругается. Не подскажите как прописать чтобы нашелся этот клас ? Мне только он один и нужен.

PS. А почему нужно использовать <?php ?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение rak »

а где лежит SocketServer? и какой неймспейс?
evgeniy123
Сообщения: 401
Зарегистрирован: 2011.11.01, 17:29

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение evgeniy123 »

rak писал(а):а где лежит SocketServer? и какой неймспейс?
commands/SocketController.php :

Код: Выделить всё

<?php
namespace  app\commands;

use yii\console\Controller;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Ratchet\MessageComponentInterface;
use Ratchet\WebSocket;
use SocketServer;


www/SocketServer.php

-----------------------------------

писали так

Код: Выделить всё

use yii\web\SocketServer; 
 
.
Результат тот же
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Где создавать контроллеры и модули для для консольного запуска

Сообщение rak »

при чем тут вообще этот неймспейс use yii\web\SocketServer; ?
если лежит в корне, то прописывать нужно app\SocketServer

ps. а вообще лучше б с php нормально разобраться, а потом уже браться за фреймверки, это ж все азы
Закрыто