Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
т.е. делаем вывод гоняй через foreach и все норм?
Господа разрабы!
в пересечении темы.
не могу решить проблему --"Class 'Form' not found" --
установкой <laravelcollective/html> - не решилось дело.
в замешательстве =/
А фасады определил в app config?
приветствую! Объясните один момент
Я так понял что Eloquent изначально использует prepare statement, если скажем вставить данные в модель через insert (например:
Book::insert($booksArr));
Я вот только не могу понять как производить обновление, так же используя подготовленные запросы?
Т.е. получается есть модель Book и мне нужно у книги с id=1 установить поле author = Иванов, а у книги с id=2 author = Петров
Как то можно это сделать одни запросом, без использования цикла? Что-то вроде:
Book::whereIn('id', $idsArr)->update($authorsArr);
мне не симпатизирует писать так:
foreach($idsArr as $id){
Book::where('id','=', $id)->update(['author'=>$authorsArr[$id]]);
}
При таком написании парсер slq постоянно разбирает запрос и все с этим связанное. Подскажите как от этого уйти плиз
Спасибо!
Если еще актуально
Сам буквально на днях настраивал ради интереса шедулер под виндой. В общем создал батник с текстовочкой:
cd C:\path_to_root_folder //здесь указывает путь до папки, где лежит artisan
C:\your_path\php.exe C:\path_to_artisan\artisan schedule:run
И все. Ради теста в шедулере запускал метод call с частотой в одну минуту и писал в лог тупо текст "Running"
В Планировщике задач винды выбрал запускать задачу раз в минуту бесконечно, и выбрал созданный батник.
Еще меня донимало окно cmd когда батник запускался, я завернул вызов батника в vbs скрипт, которое скрыто запускало окно для выполнения
Вопрос решился достаточно просто: на firefox'е стояли плагины, которые выполняли свои собственные запросы к странице
1. что за тип поля в бд?
Тип varchar
2. стринг+стринг+стринг=стринг, не? если таки "не", то сделай dd(gettype($newSkipCode)) и убедись, что стринг.
Проверил, все стринг
3. ты серьёзно?!
Это невнимательность и это никак не влияет на повторную вставку данных и вызов модели несколько раз
Еще маленькая деталь. Когда просматриваешь вкладку Queries у дебагера отображается так же, что выполнялся только 2 запроса: 1. запрос на получение последнего Skipcode и 2. вставка нового Skipcode только с одной строкой
Приветствую!
Ломаю голову над некоторой проблемой, помогите, если сможете
Мой роут:
Route::group(['middleware' => ['web']], function () {
Route::get('/getEAN13', 'CoreController@getEan13Code');
});
Мой метод getEan13Code:
public function getEan13Code() {
$lastSkipCode = Skipcode::orderBy('id', 'DESC')->first();
$newSkipCode = '';
$newSkipCode = (count($lastSkipCode) == '')? $this->startSkipCode : $lastSkipCode['dec_number'] + 256;
$currentDate = date('Y-m-d H:i:s');
$hexNumber = $this->fromDecToHex($newSkipCode);
$sc = new Skipcode;
$sc->dec_number = $newSkipCode;
$sc->hix_number = $hexNumber;
$sc->created_at = $currentDate;
$sc->updated_at = $currentDate;
$sc->save();
$controlSum = '|4';
return view('pages.result')->with(['x' => $controlSum]);
}
После обращения по адресу http://site.tu/getEan13Code в базу данных заносится почему-то 3 значения
Я голову сломал уже, не могу понять в чем дело. Если у модели Skipcode глянуть конструктор, он тоже вызывается три раза. В чем может быть причина??? Значения заносятся именно с разницей в 256 (это число я прибавляю)
Если сделать значение $newSkipCode статическим (т.е. не прибавлять к нему ничего, а просто назначить один раз значение) в таблицу заносится одно значение.
Спасите пожалуйста
Благодарю за ответы
Менять не пробовал, но в сессию методом Session::put или Session::flash данные пишутся.
Я знаю например, что при подобном коде:
Session::put('info','put here');
exit();
В сессию данные не записывают, потому Laravel останавливается принудительно (ссылку дать на источник этой инфы не могу т.к. потерял)
Вот я и думаю, что методы Auth::login() и Redirect::to() как-то аналогично не могут ужиться
в общем ошибка спряталась где-то тут
Auth::login($user, true);
Redirect::to("/kabinet")->with("user", $user);
Я так понима функция Auth::login записывает авторизированого пользователя в сессию и в БД в таблице пользователей заполняет поле remember_token. В саму таблицу token записывается, а вот в сессию ничего не пишется. Пришлось вручную заносить текущего пользователя заносить эту сессию и потом, в самом контроллере, который обрабатывает навигацию использовать функция Auth::login
Session::flash("user", $user);
Redirect::to("/kabinet")->with("user", $user);
Но все такие тему не закрываю, может кто-нибудь все такие предложит правильное решение проблемы, потому что свой костыль использовать глупо немного
Может кто-нибудь скинуть пример файла .htaccess на боевом хостинге у себя? Меня интересует в первую очередь работа с mod_rewrite на apache. Структура файлов такая на хостинге:
www/mydomain.ru/laravel
В папке laravel, соответсвено, лежат все каталоги приложения (app, public и т.д.)
В корневой папке mydomain.ru лежит файл .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.ru$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mydomain\.ru$
RewriteCond %{REQUEST_URI} !^/laravel/public/
RewriteRule ^(.*) /laravel/public/$1 [L]
Данный код позволяет мне отображать страницы не по адресу mydomain.ru/laravel/public, а при заходе на страницу mydomain.ru
Вся навигация на сайте работает корректно, более того, на сайте имеется форма обратной связи, которая отправляет вопрос в БД и эта форма отрабатывается как надо. Проблема именно в авторизации.
провожу эксперимент:
Захожу по адресу mydomain.ru (это очень важно) и пытаюсь залогиниться. Ввожу данные, нажимаю вход. Все происходит через AJAX. Появляется сообщение, что авторизация успешна и происходит редирект на адрес "/kabinet". В роутах на этот маршрут стоит фильтр before auth. Он меня блокирует и возвращает на страницу ошибки авторизации, что мол я не авторизировался и не могу попасть в личный кабинет. Если убрать этот фильтр и за этим маршрутом попробовать вывести данные авторизированного пользователя
$user = Aith::user();
print_r($user);
выводится NULL, т.е. никаких данных нет и пользователя авторизированного тоже нет.
Пробую следующее: захожу по адресу mydomain.ru/laravel/public и появляется главная страница, но на ней не загружены стили и картинки (но это не столь важно в настоящий момент). Опять же пользуюсь формой авторизации и после того, как нажимаю кнопку войти перехожу по маршруту /kabinet и тут то у меня выводится авторизированый пользователь, все его данные необходимые
Ниже код контроллера, который проводит авторизацию
// здесь получили пользователя от модели
if (count($user) != 0) {
Auth::login($user, true);
Redirect::to("/kabinet")->with("user", $user);
} else {
$this->accessDeniedTime();
return($this->err_not_found_user);
}
а это кода роута
Route::get("/kabinet", array("before" => "auth|crsf", "uses" => "NavigationController@login"));
Повторюсь, на домашнем сервере, на котором я имею доступ к файлу httpd.conf и возможность изменения DocumentRoot все работает корректно, эти файлы были просто перенесены на хостинг
Очень буду благодарен за помощь и полезную подсказку
Может кто-нибудь скинуть пример своего htaccess с изменением точки входа в приложение?
Проблем с базой нет. На самом сайте есть модуль, который выводит новости из БД и они отображаются и выбираются от туда. Да и проблем с БД не может быть в принципе, т.к. на домашнем сервере все работает и на хостинге ничего не изменялось в плане кода.
Вот можно немного подробнее с mod_rewrite, именно его я использую для того, чтобы изменить точку входа с mydomain.ru/laravel/public на mydomain.ru.
Имеем:
2 проекта, один работает на домашнем сервере, другой работает на хостинге, настройки у обоих одинаковые и обращаются к одной и той же БД, которая находится на стороннем сервере, т.е. оба проекта имеют внешний доступ к базе. При использовании домашнего сервера вся авторизация проходит как надо и я могу попасть в личный кабинет.
Проблема собственно в теме: есть проектик, на домашнем сервер все работает хорошо, но после переноса на хостинг не отрабатывает почему аутентификация. При попытке получить данные Auth::user() говорит, что пусто. При выполнении того же кода на домашнем сервере все выдает как надо.
не подскажете в чем может быть проблема или куда рыть? Подозрение есть, что проблема с записью сессии, но при заходе на сайт, сессия создается.
а какое расширение имеет файл?)
Не являюсь гуру программирования, но MVC подразумевает кажется следующее:
M - model - модель - совокупность инструментов для работы с данными/бд (получить, удалить, вставить, изменить и т.д.)
V - view - представление - фасад приложения для пользователя. Служит для отображения страниц пользователю
С - controller - контроллер - совокупность инструментов, которые являются трансфером между моделью и представлением.
Значит по логике фрейморков контроллер только получил данные и отдал модели, а модель уже произвела все действия по фильтрации и т.д.
Но я например не так немного делаю (пускай критикуют меня великие мыслители фреймворков ): у меня входящие данные от пользователя обрабатывает контроллер, т.е. фильтры, валидаторы, а вот модель только работает с БД (все те операции, которые я описал выше).
наткнулся на интересную статейку по деградации до PHP 5.3.2
http://pektop.net/2014/01/laravel-4-na- … -xostinge/
сам не пробовал, но может поможет
Приветствую господа!
Столкнулся с такой проблемой:
Написал небольшой пробный проект на Laravel 4 на локальном ПК. В наличии были: Apache и PHP 5.4
Потом решил все перенести на виртуальный хостинг в Инет
Сначала все было очень плохо с путями, но потом вроде разобрался и сейчас все отображается.
На сайте есть форма регистрации\восстановления пароля и соответственно должны приходить письма, но у меня почему-то генерируется ошибка:
fopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known
Вот код для отправки письма
Mail::send('emails.registration', $data, function ($message) {
$message->from('my@email.ru', 'from_me');
$message->to(curren@email.to)->subject('some_subj');
});
В файле app/config/mail.php в качестве провайдера пробовал и mail и smtp, результат один
Повторюсь на своем сервере все работает и письма отсылаются в обоих случаях
Не подскажите в чем может быть проблема?
Спасибо! Как-то не внимательно прочитал доки(
в общем сделал как-то так, но все равно не работает(
Route::post("/proc/{needmethod}", "CoreController@navig");
class CoreController extends BaseController{
public function navig($needmethod){
call_user_func(array($this, $needmethod));
}
public function methodOne(){
echo "some string for test";
return View::make("/viewOne");
echo "second text";
}
public function methodTwo(){
// do something
}
}
}
Какая проблема: если убрать строку <b>echo "some string for text";</b> то вообще ничего не выводится. Если строку оставить то в браузер выводится строка "some string for test" и все. Получается не отрабатывает View. В чем может быть проблема?
если создать маршрут
Route::post("/proc/methodOne", "CoreController@methodOne")
то вся View отработает как надо и все отобразится
Приветствую! Такой вопрос:
Есть контроллер, который выполняет работу только с POST запросами. В нем куча методов
class CoreController extends BaseCOntroller{
public function methodOne(){
// do something
}
public function methodTwo(){
// do something
}
}
Хочу сделать какую-нибудь конструкцию уникальную для данного контроллера. Т.е. если route начинается на "/proc", то использовать контроллер CoreController и нужный метод. Придумал вот такое решение:
Route::post("/proc/{neededmethod}", function($needmethod) {
return Redirect::action("CoreController@$needmethod"); // to needed controller and needed method
});
Но выдает ошибку "Route [CoreController@methodOne] not defined"
когда отправляю запрос по адресу "/proc/methodOne"
Делаю это для того, чтобы не описывать для каждого запроса свой route, уж очень накладно да и не правильно мне кажется