Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Извиняюсь, что то я документацию не перечитал перед тем как вопрос задавать, казалось что мы можем только переименовывать папку bundles в другую, что не решило бы мою проблему, но потом оказалось что и для бандлов можем менять папку.
'catalog' => array(
'location' => '../modules/catalog',
'handles' => 'catalog'
),
Вот так например)
Но тему еще не стоит закрывать, т.к. скоро еще вопросы назреют, уже прямо чувствую один вопрос)
До этого работал с CodeIgniter для которого был написан отличный HMVC модуль. Суть которого заключалась в том что каджый модуль лежит в отдельной папке, имеет свои модели, контроллеры, представления и все остальное. Ну и вызывать контроллер из контроллера можно было.
В laravel вызывать контроллер из контроллера вроде как можно. И создавать папки с модулями тоже можно(бандлы имею ввиду)
Т.е. все вроде как хорошо, но меня не устраивает. А неустраивает именно то что я не хочу пихать модули которые отвечают за генерачию страниц(форма обратной связи, или каталог например) в папку с бандлами по причине того что это все же разные темы, баднды за генерацию страниц мне кажется не должны отвечасть а выполняют просто роль расширенных библиотек в некоторых случаях. И хочу сделать чтоб бандлы лежали в бандлах, а модули в папке modules. Но вот че-то не знаю как это реализовать. А просто MVC я вообще как то не воспринимаю, когда куча контроллеров, можелей, и представлений разных тем лежит в 3 папках всего, а раскидать их по под папкам было бы чуть лучше, но PSR-0 не позволяет раскидать так как мне было бы удобно.
Он находит.
Вывел мне
string(5) "admin"
[5]=>
string(12) "admin.photos"
[6]=>
string(11) "admin.login"
[7]=>
string(10) "admin.text"
Поле этого меня смутил их порядок, сначала идет admin, а потом то что в папочке, т.к. в CodeIgniter(мой прошлый фреймворк), было указано, что сначала прописываются роуты которые дальше всего ведут.
Это по ходу нужно для того чтоб не получилось они не перекрывались. Т.е. если сейчас смотреть на их порядок то получится что обращаясь к /admin/login запрос идет в контроллер admin и ищат там метод login который не находит и выдает 404.
В качестве решения написал так.
$controllers = Controller::detect();
usort($controllers, function ($a, $b) {if (strlen($a) < strlen($b)) return 1; elseif (strlen($a) == strlen($b)) return 0; else return -1;});
Route::controller($controllers);
Тут массив сортируется по длине значений, не уверен что это правильно и что не может быть каких-то ситауаций где это решение не сработает, т.к. устал и тяжело думать) Но вроде должно быть правильным.
Странно что локально оно правильно сортирует.
Написал им предложение отрубить его по умолчанию, и его отрубили, так что следующий релиз уже без этого будет.
Теперь другая проблема, локально все отлично работает. А на сервере 404 ошибка по адресу /admin/login/ а если в роуты добавляю
Route::controller('admin.login');
То все ок, но я не хочу для каждого контроллера роут писать
Вопрос решен добавлением в start.php
Autoloader::map(array(
'Base_Controller' => path('app').'controllers/base.php',
'Admin_Controller' => path('app').'controllers/admin.php',
));
Unhandled Exception
Message:
Class 'Admin_Controller' not found
Выдает мне после попытки выполнения Login контроллера
Вот такой год и структура папок http://grab()by/iU76
Если напрямую к Admin_Controller общащаюсь все ок, если убираю extends, то тоже все ок, а вот наследовать не хочет.
В роутах такое написано
Route::filter('pattern: admin/*', 'auth');
Route::any('/', 'main_page@index');
Route::controller(Controller::detect());
Оно по умолчанию было включено по мойму.
Нашел таки, часов 8 на это потратил точно))) Оставлю без комментариев пожалуй.
//application/config/database.php
/*
|--------------------------------------------------------------------------
| Database Query Logging
|--------------------------------------------------------------------------
|
| By default, the SQL, bindings, and execution time are logged in an array
| for you to review. They can be retrieved via the DB::profile() method.
| However, in some situations, you may want to disable logging for
| ultra high-volume database work. You can do so here.
|
*/
'profile' => true,
Сырые запросы приводят к тому же результату почти, на 20% сеньше пямяти съедает.
DB::query('insert into test (f_1) values ("'.$text.'")');
Не помогло, написал это напрямую в protected function fetch, точнее не именно это, а так чтоб выполнилось именно это.
Потом выяснил что этот метод вообще не используется.
На счет перезапускать, да, думаю это вариант, правда не самый лучший, т.к. особенность скрипта такая, что ему придятся часа 3 работать просто для того чтоб просто дойти до места на котором остановился - иначе никак, но все же решение.
Но я еще поищу утечку, и если найду - поделюсь.
// алиас в application.config нужно убрать
Не нашел там алиаса на Laravel\Database\Connection
Куда писать
class DB extends Database {
// изначально функция приватная
static function connect($config) { return parent::connect($config); }
}
???
Не в конфиг же!!
А вообще спасибо большое, а то я уже отчаялся, после того как пол ночи общался в IRC по этому поводу и ничего не помогало.
Уже хотел во всех деструкторах связанных с базой данных написать функции очистки параметров
foreach($this as $item) clear($item) //не так конечно, но суть ясна
А потом подумал что плохо это, в ядро лезть. И очень много классов там учавствует вроде, поэтому подумал уже более мощном VPS по поим подчетам получалось 1 мегабайт за 4 минуты набегает, за сутки следовательно 360 примерно, а скрипт выполняться примерно 3 дня должен. В общем многовато надо ресурсов не на что тратить.
Как очистить память используя Eloquent ORM, мой маленький тест показал что она не очищается. А мне жизненно необходимо выполнить > 100к более сложных итераций, и только из за того что память почему-то не ощищается, переходить со своих 512 мб, на 2гб, платя в несколько раз больше за VPS не хочется.
<?
public function memory()
{
$text = <<<EOT
Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
EOT;
echo $text;
for ($x = 0; $x++ < 10000;) {
Test::create(array('f_1'=>$text));
echo $x."\n";
echo get_file_size(memory_get_usage(true))."\n";
}
}
--
$test = new Test; $test->f_1 = $text; $test->save(); тот же результат;
Использование gc_enable() не помогло.