When I select a file it is uploaded to the public/upload-images folder. In the laravel Controller the validation fails because the params are not included in the request. When I dump and die. This is what I get. As you can see... the params are missing. Below that is the Dropzone setup.
echo '<pre>';
print_r(request()->all());
echo '</pre>';
die();
$data = request()->validate([
'image' => '',
'width' => '',
'height' => '',
'location' => '',
]);
$image = $data['image']->store('user-images', 'public');
$userImage = auth()->user()->images()->create([
'path' => $image,
'width' => $data['width'],
'height' => $data['height'],
'location' => $data['location'],
]);
return new UserImageResource($userImage);
(
[image] => Illuminate\Http\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 20220406_125155.jpg
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[hashName:protected] =>
[pathName:SplFileInfo:private] => /tmp/phpdAwZvd
[fileName:SplFileInfo:private] => phpdAwZvd
)
)
props: [
'imageWidth',
'imageHeight',
'location',
],
data: () => {
return {
dropzone: null,
}
},
mounted() {
this.dropzone = new Dropzone(this.$refs.userImage, this.settings);
},
computed: {
settings() {
return {
paramName: 'image',
url: '/api/user-images',
acceptedFiles: 'image/*',
params: {
'width': this.imageWidth,
'height': this.imageHeight,
'location': this.location,
},
headers: {
'X-CSRF-TOKEN': document.head.querySelector('meta[name=csrf-token]').content,
},
success: (e, res) => {
alert('uploaded!');
},
error: (e, error) => {
console.log(error);
}
};
}
}
Related
I do not use socket.io but it gives me such an error
app.js:18695 Uncaught TypeError: Cannot read property 'socketId' of undefined
I wrote in the details, I updated it, I had an SSL problem before, so I could not connect as https, this problem came out when I was dealing with it.
i this using
laravel-websockets,
pusher,
laravel echo
chat.blade.php
var globalChannelId = 0;
var user_id = document.getElementById('user_id').value;
function channel(elem) {
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '{{ route('channelControl') }}',
cache: false,
dataType: "json",
data: {user_id: user_id, receiver_id: elem.id},
method: 'POST',
success: function (data) {
if (data.status === 200) {
globalChannelId = data.data;
document.getElementById('channel_token').value = data.data;
document.getElementById('receiver_id').value = data.receiver_id;
var message = data.message;
console.log("message")
console.log(message)
var parentDiv = document.getElementById('parentDiv');
parentDiv.innerHTML = "";
var i;
for (i = 0; i < message.length; i++) {
var div = document.createElement('div');
div.classList = "d-flex";
var h6 = document.createElement('h6');
h6.innerHTML = message[i]["user"]["name"];
var span = document.createElement('span');
span.innerHTML = message[i]["message"];
div.appendChild(h6);
div.appendChild(span);
parentDiv.appendChild(div);
}
dinle()
scroll()
} else {
}
}
});
}
var dongu;
function dinle() {
Echo.disconnect();
Echo.connect();
// Echo.leave('privatechat.5D707F5F-CAAF-A775-1FE5-E1EA94208A22');
console.log(globalChannelId);
Echo.join('privatechat.' + globalChannelId)
.here((user) => {
var activeUser = document.getElementById('activeUser');
activeUser.innerHTML = "";
console.log(user);
console.log("here");
for(var i=0 ; i<user.length ; i++){
var h6 = document.createElement('h6');
h6.innerHTML = user[i].name;
h6.id=user[i].id;
activeUser.appendChild(h6);
}
})
.joining((user) => {
console.log('joining')
var activeUser = document.getElementById('activeUser');
var h6 = document.createElement('h6');
h6.innerHTML = user.name;
h6.id=user.id;
activeUser.appendChild(h6);
})
.leaving((user) => {
console.log('Leaving');
document.getElementById(user.id).innerHTML = "";
console.log(user);
})
.listen('PrivateChannelSend', (e) => {
console.log(e.message.message)
console.log(e)
var parentDiv = document.getElementById('parentDiv');
var div = document.createElement('div');
div.classList = "d-flex";
var h6 = document.createElement('h6');
h6.innerHTML = e.message["user"]["name"];
var span = document.createElement('span');
span.innerHTML = e.message["message"];
div.appendChild(h6);
div.appendChild(span);
parentDiv.appendChild(div);
scroll()
})
.listenForWhisper('typing',response => {
console.log('typing');
document.getElementById('yaziyor').style.display = "block";
console.log(response);
if(response){
clearTimeout(dongu);
}
dongu = setTimeout(function(){
document.getElementById('yaziyor').style.display = "none";
}, 3000);
});
}
broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
'encrypted' => true,
'scheme' => 'https',
'debug' => true,
'curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
]
],
],
websockets.php
'ssl' => [
'apps' => [
[
'id' => env('PUSHER_APP_ID'),
'name' => env('APP_NAME'),
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'enable_client_messages' => true,
'enable_statistics' => true,
'encrypted' => true,
],
],
'local_cert' => '/usr/local/psa/var/modules/letsencrypt/etc/live/sub.xsite.com.tr/fullchain.pem',
'local_pk' => '/usr/local/psa/var/modules/letsencrypt/etc/live/sub.xsite.com.tr/privkey.pem',
'passphrase' => null,
'verify_peer' => false,
],
I posted a few days ago about posting a form by changing the page size. Can someone help with the steps. I am including the dump of the form and the code I'm using to post it. Here is the code to get the first page, which defaults to a page size of 30 players, and then from there I am going to post the form to change page size to 500.
my $mech = WWW::Mechanize->new();
my $url = "https://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=steamer&team=0&lg=all&players=0";
$mech->get($url);
print Dumper($mech->forms());
$VAR1 = bless( {
'default_charset' => 'UTF-8',
'enctype' => 'application/x-www-form-urlencoded',
'accept_charset' => 'UNKNOWN',
'action' => bless( do{\(my $o = 'https://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=steamer&team=0&lg=all&players=0')}, 'URI::https' ),
'method' => 'POST',
'attr' => {
'id' => 'form1',
'method' => 'post'
},
'inputs' => [
bless( {
'readonly' => 1,
'/' => '/',
'value_name' => '',
'value' => '',
'name' => 'RadScriptManager1_TSM',
'id' => 'RadScriptManager1_TSM',
'type' => 'hidden'
}, 'HTML::Form::TextInput' ),
bless( {
'/' => '/',
'value' => '30',
'name' => 'ProjectionBoard1$dg1$ctl00$ctl02$ctl00$PageSizeComboBox',
'readonly' => 'readonly',
'value_name' => '',
'type' => 'text',
'class' => 'rcbInput radPreventDecorate',
'id' => 'ProjectionBoard1_dg1_ctl00_ctl02_ctl00_PageSizeComboBox_Input'
}, 'HTML::Form::TextInput' ),
bless( {
'tabindex' => '-1',
'class' => 'rcbActionButton',
'type' => 'button'
}, 'HTML::Form::SubmitInput' ),
bless( {
'readonly' => 1,
'/' => '/',
'value_name' => '',
'name' => 'ProjectionBoard1_dg1_ctl00_ctl03_ctl01_PageSizeComboBox_ClientState',
'id' => 'ProjectionBoard1_dg1_ctl00_ctl03_ctl01_PageSizeComboBox_ClientState',
'type' => 'hidden'
}, 'HTML::Form::TextInput' ),
]
}, 'HTML::Form' );
I then try to submit the form with the following:
$mech->submit_form(
form_id => 'form1',
with_fields => {
name => 'ProjectionBoard1$dg1$ctl00$ctl03$ctl01$PageSizeComboBox',
id => 'ProjectionBoard1_dg1_ctl00_ctl03_ctl01_PageSizeComboBox_Input',
value => 500,
},
);
but the response I get from the script is 'There is no form with the requested fields '
try something like that:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new();
my $url = "https://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=steamer&team=0&lg=all&players=0";
$mech->get($url);
$mech->set_fields(
'RadScriptManager1_TSM' => '',
'ProjectionBoard1$dg1$ctl00$ctl02$ctl00$PageSizeComboBox' => '30'
'ProjectionBoard1_dg1_ctl00_ctl03_ctl01_PageSizeComboBox_ClientState' => ''
);
$mech->submit;
set the form fields using the syntax 'FIELD_NAME' => 'VALUE' and then submit
I encountered CORS policy error in my laravel 5.8 / jquery 3.4.1 app when I need send post request to create google calendar event with api like:
public function calendar_add_event(Request $request)
{
session_start();
$startDateTime = $request->start_date;
$endDateTime = $request->end_date;
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$this->client->setAccessToken($_SESSION['access_token']);
$service = new Google_Service_Calendar($this->client);
$calendarId = 'primary';
$event = new Google_Service_Calendar_Event([
'summary' => $request->title,
'description' => $request->description,
'start' => ['dateTime' => $startDateTime],
'end' => ['dateTime' => $endDateTime],
'reminders' => ['useDefault' => true],
]);
$results = $service->events->insert($calendarId, $event);
if (!$results) {
return response()->json(['status' => 'error', 'message' => 'Something went wrong']);
}
return response()->json(['status' => 'success', 'message' => 'Event Created']);
} else {
return redirect()->route('oauthCallback');
}
}
In js code I send post request :
backendCalendar.prototype.saveCalendarAddEvent = function (user_id) {
var href = this_backend_home_url + "/admin/calendar_add_event";
$.ajax( {
type: "POST",
dataType: "json",
url: href,
data: { "title": $('#new_event_title').val(), "description": $('#new_event_description').val(), "start_date": $('#new_event_start_date').val(), "end_date": $('#new_event_end_date').val(), "_token": this_csrf_token},
success: function( response )
{
popupAlert("New event was added successfully !", 'success')
},
error: function( error )
{
popupErrorMessage(error.responseJSON.message)
}
});
} // backendCalendar.prototype.saveCalendarAddEvent
I installed https://github.com/barryvdh/laravel-cors package and left file config/cors.php without changes :
<?php
return [
'supportsCredentials' => false,
'allowedOrigins' => ['*'],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['*'],
'allowedMethods' => ['*'],
'exposedHeaders' => [],
'maxAge' => 0,
];
in routes/web.php I added HandleCors middleware :
Route::group(['middleware' => ['auth', 'isVerified', 'CheckUserStatus'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
...
Route::post('calendar_add_event', 'gCalendarController#calendar_add_event')->middleware(\Barryvdh\Cors\HandleCors::class);
and I hoped that would fix my problems, but I still have this error : https://imgur.com/a/uyTy30Y
How to fix it ?
I found a decision here : Access-Control-Allow-Origin error sending a jQuery Post to Google API's
by additing additive parameters crossDomain and modification of dataType :
$.ajax({
url: 'https://www.googleapis.com/moderator/v1/series?key='+key,
data: myData,
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); },
beforeSend: setHeader
});
I am using gridview with pjax in yii2 advanced. When i add/update/delete any record the pjax loads the very first html of page. For example, i have 10 records after deleting a record there should be 9 records, but it still loads 10 records and this continues even if you have deleted all the records. Same goes for add and update as well.
But if i hit F5 then it loads the actual records fetched from the database table and if i do any of the actions again then it again shows 10 records.
Here is the Gridview code with Pjax
$this->registerJs("$('.js-delete').on('click', function(e) {
ajax_actions(this, true, {
'pjax_container': '#products-grid'
});
return false;
});");
Pjax::begin([
"id" => "products-grid",
"enablePushState" => false
]);
echo GridView::widget([
'dataProvider' => $dataProvider,
"summary" => '',
"rowOptions" => function($model) {
if($model->status == Common::STATUS_INACTIVE)
{
return ["class" => "inactive"];
}
},
'columns' => [
[
"class" => 'yii\grid\SerialColumn',
"headerOptions" => [
"class" => 'hidden-480'
],
"contentOptions" => [
"class" => 'hidden-480'
]
], [
"attribute" => "title",
"label" => "Product"
], [
"attribute" => "companies_id",
"label" => "Companies",
"value" => "companies.title"
], [
"attribute" => "product_types_id",
"header" => "Category",
"value" => "productTypes.title"
], [
"attribute" => "part_number",
"header" => "<span class=\"hidden-360\">Part </span>Number"
], [
"attribute" => "created_on",
"label" => "Added On",
"format" => ["date", "php:" . Common::DATETIME_FORMAT_DISPLAY],
"headerOptions" => [
"class" => 'textRight hidden-360'
],
"contentOptions" => [
"class" => 'textRight hidden-360'
]
], [
"class" => 'yii\grid\ActionColumn',
"header" => "Actions",
"headerOptions" => [
"class" => "textRight actions"
],
"contentOptions" => [
"class" => "textRight actions"
],
"template" => "{view} {edit} {delete}",
"buttons" => [
'view' => function($url, $model) {
return Html::a('<i class="' . Common::ICON_VIEW . '"></i> <span class="hidden-640">View</span>', ['view', 'token' => $model->token], ["class" => "call-ajax"]);
},
'edit' => function($url, $model) {
return Html::a('<i class="' . Common::ICON_EDIT . '"></i> <span class="hidden-640">Edit</span>', ['update', 'token' => $model->token], ["class" => "call-ajax"]);
},
'delete' => function($url, $model) {
return Html::a('<i class="' . Common::ICON_DELETE . '"></i> <span class="hidden-640">Delete</span>', ['delete', 'token' => $model->token], [
'class' => 'js-delete'
]);
}
]
]
]
]);
Pjax::end();
functions
function ajax_submit(element, pjax_container)
{
var form = $(element);
if(form.find('.has-error').length) return false;
$.post(form.attr('action'),form.serialize()).done(function(result){
var result = JSON.parse(result);
if(result.type=='error')
{
result.container = '.error-container';
messages(result)
}
else
{
if(pjax_container) $.pjax.reload({container: pjax_container});
$('.overlay').click();
result.container = '.message-container';
messages(result);
}
});
return false;
}
function ajax_actions(element, ask_me, params)
{
if(ask_me == true && ask() == false)
{
return false;
}
var $this = $(element);
var $params = {
callBacks: {
beforeSendAfter: function() {},
completeAfter: function() {}
}
};
if(params != undefined) $.extend(true, $params, params);
$.ajax({
type: 'POST',
url: $this.attr("href"),
cache: false,
beforeSend: function() {
if($params.callBacks.beforeSendAfter != undefined && $.isFunction($params.callBacks.beforeSendAfter)) $params.callBacks.beforeSendAfter();
},
success: function(response) {},
complete: function(response) {
var result = $.parseJSON(JSON.parse(response.responseText));
if(result.type=='error')
{
result.container = '.error-container';
messages(result)
}
else
{
result.container = '.message-container';
$('.overlay').click();
$.pjax.reload({container: $params.pjax_container});
messages(result);
}
if($params.callBacks.completeAfter != undefined && $.isFunction($params.callBacks.completeAfter)) $params.callBacks.completeAfter();
}
})
return false;
}
I have used check boxes in my gridview,like this
<?php
if(isset($dataProvider) && !empty($dataProvider)) {
echo \yii\grid\GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn',
'header' => 'No.'],
[
'class' => 'yii\grid\CheckboxColumn',
'header'=>'Select',
'checkboxOptions' => function ($model, $key, $index, $column) {
return ['value' => $model->dsItemId];
}
],
[
'label'=>'Category',
'value' => function ($model) {
return $model->getdscategoryName();
},
],
'dsItemName',
'qty',
[
'attribute' => 'image',
'enableSorting' => false,
'format' => 'image',
'value' => function ($model) {
return $model->getImageUrl();
},
],
],
]);
echo Html::submitButton('Save',['id' => 'saveBtn','class' => 'btn btn-danger']);
}?>
When I'm selecting check boxes and select savebutton, it will go to this function given below,
<script>
$( document ).ready(function() {
$('#saveBtn').click(function() {
var idVar = '';
$("input[name='selection[]']").each( function () {
if($(this).is(':checked')) {
if(idVar != '') {
idVar += ',' + $(this).val();
}else {
idVar = $(this).val();
}
}
});
$.ajax({
type: "POST",
url:"<?php echo Yii::$app->urlManager->createAbsoluteUrl(['dsproductitems/setproduct'])?>",
data: { dsItemId : idVar },
success:function(data) {
location.reload();
}
});
});
});
</script>
Here I'm trying to redirect my form to controller through ajax and the problem is, program control is failing to enter into flowing code.
$.ajax({
type: "POST",
url:"<?php echo Yii::$app->urlManager->createAbsoluteUrl(['dsproductitems/setproduct'])?>",
data: { dsItemId : idVar },
success:function(data) {
location.reload();
}
});
});
i'm failing to figure out why.. please help..