Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 4 » [L4] Подключение Laravel к существующему проекту. » 20.06.2013 23:00:19

Laravel 4 использует большую часть модулей из проекта Symfony2, если так можно сказать.
Чтобы это узнать, достаточно посмотреть список используемых компонентов средствами Composer.
В частности, для управления базами данных используется компонент doctrine/dbal: 2.4.x
Включайте его в проект и пользуйтесь.
P.S. Eloquent - просто надстройка над Doctrine.

#2 Re: Прочее » Обсуждение нативных фреймворков (Phalcon и др.) » 26.12.2012 15:58:39

С фреймворками на Си одна проблема — нельзя залезть в код ядра. А здесь всегда можно исходники глянуть, если что-то идет не так как ожидается. И сразу поправить, и разрабам отписать.

Ну почему же, очень даже. Касательно Phalcon, там полностью открытый исходный код, скачивайте с github, анализируйте, вносите предложения. ☺

#3 Re: Laravel 3 » Развёртывание Laravel на хостинге » 05.12.2012 18:01:19

☺ Будем считать — разобрались. Лишь бы это помогло ТС разобраться. ☺

#4 Re: Laravel 3 » Развёртывание Laravel на хостинге » 05.12.2012 15:35:43

Может быть, в этом и нет необходимости, когда сайт представляет собой набор html файлов. Но сейчас, как правило, сайты проявляют характер приложения, (наверное, поэтому и вошло в обиход именование web-приложение) и необходимо знать работу сервера с точки зрения web-приложения, т.е. работу с каталогами, куки, сессии, заголовки, технологии обработки запросов и т.д.
Например, совсем недавно был вопрос — почему после установки куки приложение его не видит, но в браузере установленный куки есть. Что и кого только не пинали — и фреймворк, и сервер, и даже провайдера… Все оказалось банально просто — просто «разработчик» не знал, как работает WEB, в частности сервер, CGI, AJAX. Вот такая история. ☺
Или еще: смотрел недавно некий ресурс с «закрытой» базой — так там «разработчики» любезно предоставляют адрес с доступом к исходникам прямо в javascript скрипте…

#5 Re: Laravel 3 » Развёртывание Laravel на хостинге » 05.12.2012 12:42:51

Для тех, кто в бронепоезде.

При выдаче хостингом ресурса для клиента последнему «дается» каталог (директория, папка) в публичном каталоге. Допустим, ~/vasjapupkin/public_html. Это и есть ваш рабочий (основной) каталог, в котором сервер ищет скрипты. Вам нужно перенаправить сервер из этого каталога в каталог ./public, где у вас находится index.php от Laravel (в данном случае). Для этого есть mod_rewrite. Т.е. у вас должен быть .htaccess в public_html, который перенаправляет запросы в ./public, и рабочий в ./public, который перенаправляет запросы в index.php. Все это описано в документации (особенно в английской) [laravel.com]. Если есть трудности с пониманием работы сервера (Apache в данном случае), нужно почитать документацию, слава обществу, с этим трудностей нет. К тому же, если вы не знаете, как работает сервер, как вы тогда собираетесь писать сайт? Вопрос, конечно, риторический… ☺

#6 Re: Laravel 3 » JSONP через роутер и контроллер » 07.11.2012 15:37:52

С такой проблемой не сталкивался и не могу придумать, что может её вызывать. index.php$1 или index.php?$1 — довольно странное решение, но раз только оно работает… А index.php у вас вписан в DirectoryIndex?

Если в изначальном .htaccess поменять index.php?$1 на index.php/$1, но без имени хоста, тоже будет No input file specified?

Я бы прошёл отладчиком и посмотрел, что делает Laravel — часто это быстрее, чем разбираться методом тыка.

Потому что тогда у вас в mod_rewrite (при index.php$1)на выходе (причем промежуточном) получиться:

вход: mysite/home/1
после RewriteRule index.phphome/1 (именно так) и пошли по кругу. в бесконечный цикл. Флаг [L] не спасет, т.к. в htacces он не работает. поэтому ловим ’500’.

Так что в документации указан правильный файл. Практически… ☺

#7 Re: Laravel 3 » JSONP через роутер и контроллер » 07.11.2012 15:21:31

{=John} В общем обошел пока эту фигню через финт ушами:
маршрут прописываю как:

PHP
Route::get('home/(:any?)', function($param null) {
        return 
Controller::call('home@index', array($param));
});
Route::controller(Controller::detect());

в контроллере:

PHP
public function action_index($param) {
    echo 
"$param<br>";
}

собственно получаю что нужно, без грязи

Что же происходит на самом деле?
На самом деле в routes.php, естественно, команды (инструкции) выполняются последовательно.
Поэтому, после формирования всех маршрутов у нас есть массив последних.
Если Route::controller(Controller::detect()); указан первым маршрутом, то в массиве маршрутов первым будет маршрут вида
/home/(:any?)/(:any?)/(:any?)/(:any?)/(:any?) , где (:any?) будет повторен 5 раз, согласно переменной $segments.
Цитата из router.php

PHP
...
/**
     * The number of URI segments allowed as method arguments.
     *
     * @var int
     */
    
public static $segments 5;
...
            
// The number of method arguments allowed for a controller is set by a
            // "segments" constant on this class which allows for the developer to
            // increase or decrease the limit on method arguments.
            
echo "<pre>".print_r(static::$segments,true)."</pre>";
exit;
            
$wildcards = static::repeat('(:any?)', static::$segments);

В итоге, маршрут .home/(:any?) функцией match (там же), идентифицируется как /home/(:any?)/(:any?)/(:any?)/(:any?)/(:any?), который и выдается, после чего получаем ’404’. Все.
Вывод: или прописывать все роуты вручную, или ставить Route::controller(Controller::detect()); в конце.
Что и сделал John.
Если использовать detect, тогда всю маршрутизацию нужно согласовать с соглашениями Laravel.
И обработка Route::get(’home/(:any?)’,… только через Closure.

#8 Re: Laravel 3 » Разделение Auth » 06.11.2012 21:06:57

Да, только наследовать не сам eloquent, а auth/drivers/driver.php - там всего три функции написать. После чего подсунуть его классу Auth функцией  Auth::extend. И этому драйверу указать уже свою модель. Можно, конечно, наверное и eloquent, только, думаю, наследовать driver будет идеологически вернее.

#9 Re: Laravel 3 » Разделение Auth » 06.11.2012 17:47:17

Я экспериментировал так:

www/bundles/admin/models/adminuser.php

PHP
<?

class AdminUser extends Eloquent {

    public static $timestamps = true;

    public static $table = 'users';// вот здесь можно назначить другую таблицу

    public function hello() {
        return AdminUser::take(1)->get();
    }
}

www/bundles/admin/start.php

PHP
<?

Autoloader::map(array(
    'AdminUser'    => path('bundle').'admin/models/adminuser.php',
));

#12 Re: Laravel 3 » Забрать параметр из route » 27.10.2012 11:20:43

url полностью передается в контроллер, в том числе wildcard.
Достаточно передать параметр обработчику, например:

Route::get('news/detail-(:num)', array('as' => 'news_detail', 'uses' => 'frontend.news@detail'));

В контроллере

class News_Controller extends Base_Controller {

      ...
	public function action_detail($newsID)
	{
		
		return "Читаем новость с ID= ". $newsID;
	}
     ...
}

Кстати, в документации на Laravel 2 это было, а потом как-то ""затерялось" smile

#13 Re: Laravel 3 » Authentication » 25.10.2012 20:39:37

Свой предыдущий пост отменяю. Проверил, по крайней мере при авторизации этот метод не работает. Все-таки не даром в документации требуется наличие поля id  в базах...

#14 Re: Laravel 3 » Authentication » 25.10.2012 11:33:26

mephis пишет:

Добрый день.
Начал работать с Laravel. Имеется таблица:
`user_id` int
`login_name` varchar
`pwd` varchar - шифруется в md5

использую:

Route::post('/login/process', function() {
	$user_data = array('username' => Input::get('login'), 'password' => md5(Input::get('password')));
	if (Auth::attempt($user_data)) 	{
	    return Redirect::to('home.index');
	}
	else {
		print_r($user_data);
	}
});

Авторизация не проходит. Как исправить?
Заранее спасибо.

<?
class User extends Eloquent {
	public static $key = 'user_id';
}

Так не пробовали? Ключ id меняется на user_id,  больше ничего переписывать не нужно.
Класс Eloquent наследует Laravel\Database\Eloquent\Model.

get_class_methods('user')
Array
(
    [0] => __construct
    [1] => fill
    [2] => fill_raw
    [3] => accessible
    [4] => create
    [5] => update
    [6] => _find
    [7] => all
    [8] => _with
    [9] => has_one
    [10] => has_many
    [11] => belongs_to
    [12] => has_many_and_belongs_to
    [13] => push
    [14] => save
    [15] => delete
    [16] => timestamp
    [17] => sync
    [18] => changed
    [19] => dirty
    [20] => table
    [21] => get_dirty
    [22] => get_key
    [23] => set_key
    [24] => get_attribute
    [25] => set_attribute
    [26] => purge
    [27] => to_array
    [28] => __get
    [29] => __set
    [30] => __isset
    [31] => __unset
    [32] => __call
    [33] => __callStatic
)
get_class_vars('user')
Array
(
    [attributes] => Array
        (
        )

    [original] => Array
        (
        )

    [relationships] => Array
        (
        )

    [exists] => 
    [includes] => Array
        (
        )

    [key] => id
    [accessible] => 
    [hidden] => Array
        (
        )

    [timestamps] => 1
    [table] => 
    [connection] => 
    [sequence] => 
    [per_page] => 20
)
get_parent_class('user')
Laravel\Database\Eloquent\Model

#15 Re: Laravel 3 » Странное поведение в шаблоне » 15.10.2012 17:30:17

Выдержка из blade.php

/**
261:      * Rewrites Blade structure openings into PHP structure openings.
262:      *
263:      * @param  string  $value
264:      * @return string
265:      */
266: protected static function compile_structure_openings($value)
267:     {
268:         $pattern = '/(\s*)@(if|elseif|foreach|for|while)(\s*\(.*\))/';
269: 
270:         return preg_replace($pattern, '$1<?php $2$3: ?>', $value);
271:     }

Так оно и есть, должно быть отдельной строкой.

#16 Прочее » Обсуждение нативных фреймворков (Phalcon и др.) » 13.09.2012 20:52:25

oleg578
Ответов: 11

Выделено из темы про бенчмарк — прим. адм.

Сегодня попробовал Laravel на Nginx + PHP-fpm без Apache — отдача идет в 4 раза быстрее. Если интересно, могу выложить инструкцию для Debian.
P.S. Заметил внезапно, что laravel.ru на Nginx 0.7.

#17 Re: Laravel 3 » Проблема при работе с Schema » 10.09.2012 12:19:59

От себя еще добавлю. Внешние ключи в MySQL (InnoDB) используются для обеспечения целостности данных. Сами же связи контролируютя моделью. Поэтому я бы посоветовал сначала определить связи в приложении, а потом, если необходимо, закрепить эти связи в базе (если используется InnoDB).
По поводу ошибки - скорее всего, у вас не достаточно определен  $table->integer('iduser'), попробуйте дать ему свойства unsigned NOT NULL.

#18 Re: Прочее » Тестовое приложение на Laravel для бенчмарка » 06.09.2012 09:23:16

Любопытство берет свое. Протестировал специально на vps 1Ghz/256M. Взял Laravel и Zend.
В качестве теста -

<?= 'Hello, world!!!';

Тест

ab -t 30 -c 5

Результат -
Чистый PHP - 59,76
Zend           - 11,38
Laravel        - 14,43
Phalcon       - 41,05

Но вот к чему эти тесты?

Возьмем, например, Google. По оценкам, они обрабатывают порядка 3,5 миллиарда запросов в сутки. При этом у них задействовано порядка 900000 серверов... Получается, даже если взять  30% готовность, то в среднем сервер обрабатывает 1 запрос каждые 7 секунд....
Теперь, известно, что пользователь сайта тратит на самый быстрый просмотр страницы 6 секунд. Возьмем 10 пользователей. За минуту они сделают в среднем 100 запросов, т.е. 1,67 запроса в секунду, что составляет почти 145000 запросов в сутки.
Что-то мало я видел сайтов с такой посещаемостью.
"Какую посещаемость сайта считать высокой?"
Итог: В этих тестах нет практически никакого смысла. Вопрос в удобстве использования и соответствия фреймворка поставленным задачам. А дальше - дело техники. Расчет необходимого количества серверов, базы данных и т.д.
С учетом сегодняшних средних скоростей каналов и среднего веса страниц, думаю, вполне хороший показатель выше 10 для гарантированной доставки ответа на запрос пользователя за 1,5 секунды.

У каждого фреймворка есть свои прелести и недостатки... Универсального нет.

Что касается Phalcon.
Фреймворк очень перспективный. Думаю, навеян Yaf (Там, блин, вся документация на китайском...). Но пока он еще сыроват, но при этом чертовски привлекателен. Необходимо отметить коренную переработку beta-версии по сравнению с релизом. Полностью все переделано, нужно по-новому все изучать. Так что для производства пока еще рано его использовать. К тому же, если сайт ставится на хостинг, вопрос, захочет ли хостинг ставить Phalcon.

P.S. раньше еще сравнивал Laravel vs Kohana - силы приблизительно равны с небольшим перевесом в пользу Laravel.
Но у Laravel есть одно преимущество - он, как мне кажется, интуитивно понятен сразу. Особенно после Zend smile

#19 Laravel 3 » Небольшой совет по безопасности при установке » 19.08.2012 12:35:57

oleg578
Ответов: 0

При распаковке фреймворка в рабочую папку проверьте права файлов. Может случиться так, что много файлов будут иметь биты исполнения в маске. Исправить эту ситуацию можно при помощи команды в корневой директории: 

 $ find . -type f -perm /u+x,g+x -iname '*' -exec chmod 644 {} \;

Если у вас, конечно, сервер на Linux. smile

#20 Re: Общий раздел » Русская документация Laravel » 18.08.2012 13:53:52

Я тщательно просмотрел все переводы на этом сайте. Материалы сайта мне очень помогают, за что огромное спасибо. Ну и, конечно же, я абсолютно согласен с вашим предложением разместить эти материалы на сайте. Пусть всем будет легче в освоении Laravel. Что-то в нем все-таки есть притягательное. Удачи!

#21 Общий раздел » Русская документация Laravel » 18.08.2012 12:48:32

oleg578
Ответов: 4

Сделан перевод документации Laravel в формате Markdown. Документация оформлена в виде стандартного пакета. Все находится на Github: https://github.com/oleg578/laravel-rudocs

Подвал раздела